使用sed替换apache2.conf文件中的代码块内的文本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用sed替换apache2.conf文件中的代码块内的文本相关的知识,希望对你有一定的参考价值。
我一直在使用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
我确信我在开头标签内使用的双引号有问题。
任何帮助将非常感激。提前致谢。
答案
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>
上面只是在找到起始行时设置一个标志,在找到结束行时清除它,并在设置该标志时将拒绝更改为授予。
另一答案
sed -i '/<FilesMatch "^\.ht">/,@</FilesMatch>@ s/Require all denied/Require all granted/' /etc/apache2/apache2.conf
以上是关于使用sed替换apache2.conf文件中的代码块内的文本的主要内容,如果未能解决你的问题,请参考以下文章
使用 grep 和 sed 在 shell 中查找和替换同一文件中的多行
使用 sed 替换大量文件中的 Windows 换行符 - 但它没有