搜索并替换已注释的linux配置行

时间:2016-03-05 21:44:09

标签: sed

我想从命令行usind sed更改配置文件中的注释行。 例如,行

  

#xllForwarding no

是与之相关的。我想解开它并将值更改为yes。 我怎样才能做到最好的练习?

我试过的一行示例:

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

它没有用。 请注意,#符号和配置名称之间可能有空格(0或更多)

由于

2 个答案:

答案 0 :(得分:1)

你可以使用类似的东西:

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

它匹配整行(^$确保重新跨越整行)

  1. 可选空白[ \t]*
  2. a #
  3. 另一个可选空格[ \t]*
  4. 某些(.*)被捕获到\1
  5. no
  6. 在lineend [ \t]*
  7. 处的可选空格

    替换重新使用\1(在#之后覆盖(可选空格)到no,然后将yes放在后面。

答案 1 :(得分:1)

source 'https://github.com/CocoaPods/Specs.git' platform :ios, '7.0' pod 'Google-Mobile-Ads-SDK', '~> 7.0' 更改为/^#[ *] passwordAuthentication.* /并且它可以正常工作。您不需要/^# *passwordAuthentication .*/'作为BRE,因此将在所有seds中按原样运行。获取有关regexps的教程。