我一直在使用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
而且我敢肯定在开头标记中使用的双引号有误。
任何帮助将不胜感激。 预先感谢。
答案 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>
上面只是在找到起始行时设置一个标志,在找到结束行时清除它,并在设置该标志时拒绝更改为已授予。