我有一个表格的文本文件:
a = 1
#b = [2,3]
c = 4
d = [5,6]
e = [7,8]
我想用数字替换括号(和括号)内的模式,但忽略注释中的匹配,最好使用sed。
对于只有一行匹配的文件,我已经使用了
sed -i "/^#/!s/\[.*\]/9/" myfile
如果有更多内容,如何修改它以仅替换第一个匹配?
答案 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]
< ---这不会改变你想要的