我想在命令行usind sed中更改配置文件中的注释行。 例如,行搜索并替换注释的Linux配置行
#xllForwarding没有
被coommented。我想解冻它并将其值更改为yes。 我怎么能做到最好的做法?
例如一条线我想:
sed -r 's/^#[ *] passwordAuthentication.* /passwordAuthentication no/' sshd_config
它没有工作。 音符可能会有#号和配置名称之间的空隙(0或更多)
感谢
我想在命令行usind sed中更改配置文件中的注释行。 例如,行搜索并替换注释的Linux配置行
#xllForwarding没有
被coommented。我想解冻它并将其值更改为yes。 我怎么能做到最好的做法?
例如一条线我想:
sed -r 's/^#[ *] passwordAuthentication.* /passwordAuthentication no/' sshd_config
它没有工作。 音符可能会有#号和配置名称之间的空隙(0或更多)
感谢
将/^#[ *] passwordAuthentication.* /
更改为/^# *passwordAuthentication .*/'
它会工作。您不需要-r
,因为这是BRE,因此可以在所有的seds中按原样工作。获取关于正则表达式的教程。
你可以使用类似:
sed -r 's/^[ \t]*#[ \t]*(.*)no[ \t]*$/\1yes/g;' file
它一整行(^
和$
匹配确保重新包括一条完整的线)组成
[ \t]*
#
[ \t]*
(.*)
在lineend捕获到\1
no
[ \t]*
替换重用\1
(寄托都下述(可选的空白) #
之后达到no
,然后将yes
放在后面。
这是一个危险的解决方案,因为它可以改变配置值是没有人的行,例如。 – Student
@student'no'用'$'锚定在线端。 'no'和lineend之间只有一个可选的空白'[\ t] *'允许。以'nobody'结尾的行不会匹配,也不会改变。 –
你说得对, 对不起。 – Student