更改配置文件和复杂的注释操作

时间:2016-02-25 21:51:04

标签: sed comments configuration-files

我希望能够更改配置文件中的特定设置,其中包括删除注释掉这些设置的注释代码(;)。此外,我想保留真实的评论。这意味着

some_setting=0

;some_setting=0

都会变成

some_setting=9

但这也意味着

some_setting=0    ;an honest-to-goodness comment

;some_setting=0    ;an honest-to-goodness comment

将是

some_setting=9    ;an honest-to-goodness comment

我也想离开

;Idle talk about some_setting=

单独

我似乎能够通过

实现几乎所有这一切
sed -e 's/^\s*;\?\s*some_setting\s*=.*\(;\)\?/some_setting=9  \1/'

但问题是真正的评论会从some_setting的行中删除。请注意,我已经考虑到许多这些令牌周围都有空格。

我已经考虑过使用awk,但最好的选择是sed

我在Debian 8.3上使用GNU sed 4.2.2。

1 个答案:

答案 0 :(得分:1)

我用它作为测试输入:

some_setting=0
;some_setting=0
some_setting=0    ;an honest-to-goodness comment
;some_setting=0    ;an honest-to-goodness comment
;Idle talk about some_setting=

使用此命令:

$ sed -r 's/^;?(some_setting=)[^[:space:]]*(.*)/\19\2/' infile
some_setting=9
some_setting=9
some_setting=9    ;an honest-to-goodness comment
some_setting=9    ;an honest-to-goodness comment
;Idle talk about some_setting=

所以一行以可选;后跟some_setting=开头,并且在用some_setting=9开头的行替换之后出现任何非空格字符;该行的其余部分保持不变。