sed 用换行符替换模式

sed 用换行符替换模式

我正在尝试将 httpd.conf 文件中的特定“AllowOverride None”替换为“AllowOverride All”。

鉴于该文件有多行具有相同的模式,我想我会做一个多行模式来替换它...除非 sed 有办法选择何时替换该模式。

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
AllowOverride None

到:

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
AllowOverride All

我将单行替换为:

sudo sed -i 's|DocumentRoot "/var/www/html"|DocumentRoot "/var/www/html/test"|' /etc/httpd/conf/httpd.conf

但我不知道如果有多行怎么办

谢谢

答案1

sed有很多方法可以做到这一点。例如,使用change命令:

sed --in-place '/^AllowOverride All/c\
AllowOverride None\n' httpd.conf

或者,更好地使用s替代品:

sed --in-place '/^AllowOverride/s/All/None/'

后者可以音译为“在以 开头的行中AllowOverride,将第一个实例替换为AllNone

答案2

结果你可以指定行号来替换字符串:

sudo sed -i '151s/AllowOverride None/AllowOverride All/' httpd.conf

工作完美。

相关内容