从linux shell脚本

时间:2015-08-30 10:32:54

标签: linux bash shell sed

我一直在使用grep命令从文件中搜索内容, 以下是命令及其输出: -

grep -i -A4 -B5 -w  "servername.*xyz" httpd.conf.webserver.apache22.orig

<VirtualHost *>
ServerAdmin errorhelp@xyz.com
DocumentRoot "/opt/xyz/www"
DirectoryIndex  error.html
ErrorDocument 404 /error.html
ServerName email-xyz.com
ProxyRequests off
ProxyPass / http://localhost/ui/pages/companies/xyz/
ProxyPassReverse / http://localhost/ui/pages/companies/xyz/
</VirtualHost>

--

<VirtualHost *>
ServerAdmin errorhelp@xyz.com
DocumentRoot "/opt/xyz/www"
DirectoryIndex  error.html
ErrorDocument 404 /error.html
ServerName xyz.p.com
ProxyRequests off
ProxyPass / http://localhost/ui/pages/companies/xyz/
ProxyPassReverse / http://localhost/ui/pages/companies/xyz/
</VirtualHost>

有人可以建议我永久删除文件中的abve两节的方法。

以下是我尝试过的方法,有人可以告诉我我的错误: -

sed -i "/`grep -i -A4 -B5 -w  "servername.*xyz" httpd.conf.webserver.apache22.orig`/d" httpd.conf.webserver.apache22.orig

在反引号中没有执行内容并将其传递给sed编辑器。

1 个答案:

答案 0 :(得分:0)

您可以使用null RS尝试此gnu-awk:

awk -v RS= -v ORS='\n\n' -v IGNORECASE=1 '!/ServerName[[:space:]]+.*xyz/' httpd.conf.webserver.apache22.orig

RS=会在一条记录中生成整个<VirtualHost...</VirtualHost>块,并使用!/ServerName[[:space:]]+.*xyz/我们可以否定输出中的搜索结果。