如何到grep文本块? [英] How to grep a block of text?
本文介绍了如何到grep文本块?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想从文件中删除特定的服务器块
*了NameVirtualHost
<虚拟主机* GT;
的DocumentRoot/应用程序/ MAMP / htdocs目录
服务器名本地主机
< /虚拟主机>
<虚拟主机* GT;
的DocumentRoot/应用程序/ MAMP / htdocs中/基岩/网络
服务器名基岩
< /虚拟主机>
<虚拟主机* GT;
DocumentRoot的的DocumentRoot
服务器名NEWSERVER
< /虚拟主机>
到目前为止,我已经使用以下,但它似乎并没有给我正确的结果,但对块的每一行,而不是里grep(内部的grep)分别。
的grep -Vf$(grep的-w -B 2 -A 1'NEWSERVER/应用程序/ MAMP / conf目录/阿帕奇/ httpd.conf中)/应用程序/ MAMP / conf目录/apache/httpd.conf;
在以下内容中的上述结果
*了NameVirtualHost
的DocumentRoot/应用程序/ MAMP / htdocs目录
服务器名本地主机
的DocumentRoot/应用程序/ MAMP / htdocs中/基岩/网络
服务器名基岩
虽然不是我想要的以下内容:
*了NameVirtualHost
<虚拟主机* GT;
的DocumentRoot/应用程序/ MAMP / htdocs目录
服务器名本地主机
< /虚拟主机>
<虚拟主机* GT;
的DocumentRoot/应用程序/ MAMP / htdocs中/基岩/网络
服务器名基岩
< /虚拟主机>
解决方案
这是另一个与DIFF与您最初的命令部分:
差异≤(grep的-w -B 2 -A 1'NEWSERVER'/Applications/MAMP/conf/apache/httpd.conf)/应用程序/ MAMP / conf目录/阿帕奇/ httpd.conf文件| grep的-e'^> | SED -e'S / ^> //
I want to delete a block of specific server from this file
NameVirtualHost *
<VirtualHost *>
DocumentRoot "/Applications/MAMP/htdocs"
ServerName localhost
</VirtualHost>
<VirtualHost *>
DocumentRoot "/Applications/MAMP/htdocs/bedrock/web"
ServerName bedrock
</VirtualHost>
<VirtualHost *>
DocumentRoot "documentroot"
ServerName newserver
</VirtualHost>
So far I've used the following, but it doesn't seem to give me the proper result, but instead greps for each line of the block (of the inner grep) individually.
grep -vF "$(grep -w -B 2 -A 1 'newserver'/Applications/MAMP/conf/apache/httpd.conf)" /Applications/MAMP/conf/apache/httpd.conf;
The above results in the following:
NameVirtualHost *
DocumentRoot "/Applications/MAMP/htdocs"
ServerName localhost
DocumentRoot "/Applications/MAMP/htdocs/bedrock/web"
ServerName bedrock
While instead I want the following:
NameVirtualHost *
<VirtualHost *>
DocumentRoot "/Applications/MAMP/htdocs"
ServerName localhost
</VirtualHost>
<VirtualHost *>
DocumentRoot "/Applications/MAMP/htdocs/bedrock/web"
ServerName bedrock
</VirtualHost>
解决方案
an other one with diff and parts of your initial command:
diff <(grep -w -B 2 -A 1 'newserver' /Applications/MAMP/conf/apache/httpd.conf) /Applications/MAMP/conf/apache/httpd.conf | grep -e '^> ' | sed -e 's/^> //'
这篇关于如何到grep文本块?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文