如何到grep文本块? [英] How to grep a block of text?

查看:155
本文介绍了如何到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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆