使用sed

时间:2018-09-01 05:00:59

标签: linux shell awk sed scripting

我一直在使用Linux中有用的sed命令的一些技巧来替换apache2.conf文件中的代码块内的文本单词。尝试在Google和stackoverflow上搜索已解决的解决方案。但是,那些人并不能真正获得帮助。

这是apache2.conf文件中的代码片段。

<FilesMatch "^\.ht">
        Require all denied
</FilesMatch>

我希望将块中被拒绝的单词改成授予。像下面一样,

<FilesMatch "^\.ht">
        Require all granted
</FilesMatch>

我正在尝试使用命令

sudo sed -i "/<IfModule "^\.ht">/,\@</IfModule>@ s/Require all denied/Require all granted/" /etc/apache2/apache2.conf

而且我敢肯定在开头标记中使用的双引号有误。

任何帮助将不胜感激。 预先感谢。

2 个答案:

答案 0 :(得分:0)

sed -i '/<FilesMatch "^\\.ht">/,\@</FilesMatch>@ s/Require all denied/Require all granted/' /etc/apache2/apache2.conf

答案 1 :(得分:0)

sed用于在单独的行上进行s / old / new,仅此。对于其他任何事情,您都应该使用awk:

$ awk '/<FilesMatch "\^\\\.ht">/{f=1} f{sub(/denied/,"granted")} /<\/FilesMatch>/{f=0} 1' file
<FilesMatch "^\.ht">
        Require all granted
</FilesMatch>

上面只是在找到起始行时设置一个标志,在找到结束行时清除它,并在设置该标志时拒绝更改为已授予。