使用sed替换除注释之外的第一次出现

时间:2016-10-18 08:40:57

标签: sed command-line text-processing

我有一个表格的文本文件:

a = 1
#b = [2,3]
c = 4
d = [5,6]
e = [7,8]

我想用数字替换括号(和括号)内的模式,但忽略注释中的匹配,最好使用sed。

对于只有一行匹配的文件,我已经使用了

sed -i "/^#/!s/\[.*\]/9/" myfile

如果有更多内容,如何修改它以仅替换第一个匹配?

2 个答案:

答案 0 :(得分:0)

这个单行应该做的工作:

sed  '/^\s*#/!{s/\[[^]]*\]/9/}' file

如果您愿意进行更改,请添加-i选项。

答案 1 :(得分:0)

这是正确的,因为只改变了第一次出现。

awk '!end && /^[^#]+ = \[/ {$3="9"; end=1}1' myfile

  • 如果没有结束标记且行未从#开始并且与= [匹配,则更改第三列并设置标记以防止在下一次出现时更改。

a = 1

#b = [2,3]

c = 4

d = 9

e = [7,8]< ---这不会改变你想要的