使用 sed 替换除注释之外的第一次出现
Replacing first occurence except comments using sed
我有一个格式的文本文件:
a = 1
#b = [2,3]
c = 4
d = [5,6]
e = [7,8]
我想用数字替换括号(和括号)内的模式,但忽略注释中的匹配项,最好使用 sed。
对于只有一行匹配的文件,我使用了
sed -i "/^#/!s/\[.*\]/9/" myfile
如果有更多匹配项,如何修改为仅替换第一个匹配项?
这条单线应该可以完成这项工作:
sed '/^\s*#/!{s/\[[^]]*\]/9/}' file
如果您想就地进行更改,请添加 -i
选项。
这是正确的,因为只改变了第一次出现的地方。
awk '!end && /^[^#]+ = \[/ {="9"; end=1}1' myfile
- 如果没有结束标志并且行不是从
#
开始并与 = [
匹配,则更改第三列并设置标志以防止在下一次出现时更改。
a = 1
#b = [2,3]
c = 4
d = 9
e = [7,8]
<--- 这个没有改成你想要的
我有一个格式的文本文件:
a = 1
#b = [2,3]
c = 4
d = [5,6]
e = [7,8]
我想用数字替换括号(和括号)内的模式,但忽略注释中的匹配项,最好使用 sed。
对于只有一行匹配的文件,我使用了
sed -i "/^#/!s/\[.*\]/9/" myfile
如果有更多匹配项,如何修改为仅替换第一个匹配项?
这条单线应该可以完成这项工作:
sed '/^\s*#/!{s/\[[^]]*\]/9/}' file
如果您想就地进行更改,请添加 -i
选项。
这是正确的,因为只改变了第一次出现的地方。
awk '!end && /^[^#]+ = \[/ {="9"; end=1}1' myfile
- 如果没有结束标志并且行不是从
#
开始并与= [
匹配,则更改第三列并设置标志以防止在下一次出现时更改。
a = 1
#b = [2,3]
c = 4
d = 9
e = [7,8]
<--- 这个没有改成你想要的