2016-03-05 55 views
-1

我想在命令行usind sed中更改配置文件中的注释行。 例如,行搜索并替换注释的Linux配置行

#xllForwarding没有

被coommented。我想解冻它并将其值更改为yes。 我怎么能做到最好的做法?

例如一条线我想:

sed -r 's/^#[ *] passwordAuthentication.* /passwordAuthentication no/' sshd_config 

它没有工作。 音符可能会有#号和配置名称之间的空隙(0或更多)

感谢

回答

1

/^#[ *] passwordAuthentication.* /更改为/^# *passwordAuthentication .*/'它会工作。您不需要-r,因为这是BRE,因此可以在所有的seds中按原样工作。获取关于正则表达式的教程。

1

你可以使用类似:

sed -r 's/^[ \t]*#[ \t]*(.*)no[ \t]*$/\1yes/g;' file 

它一整行(^$匹配确保重新包括一条完整的线)组成

  1. 可选空白[ \t]*
  2. 一个#
  3. 另一可选空白[ \t]*
  4. 东西(.*)在lineend捕获到\1
  5. no
  6. 可选空白[ \t]*

替换重用\1(寄托都下述(可选的空白) #之后达到no,然后将yes放在后面。

+0

这是一个危险的解决方案,因为它可以改变配置值是没有人的行,例如。 – Student

+0

@student'no'用'$'锚定在线端。 'no'和lineend之间只有一个可选的空白'[\ t] *'允许。以'nobody'结尾的行不会匹配,也不会改变。 –

+0

你说得对, 对不起。 – Student