使用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 换行符 - 但它没有

Sed - 查找和替换 html 代码中的文本(从一种语言到另一种语言)

linux 特殊符号怎样用sed替换

使用 python 中的 sed 替换字符串和更新文件

用脚本中的 sed 将行替换为文件的内容