我希望能够更改配置文件中的特定设置,其中包括删除注释掉这些设置的注释代码(;
)。此外,我想保留真实的评论。这意味着
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。
答案 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
开头的行替换之后出现任何非空格字符;该行的其余部分保持不变。