问题描述
我想从我的文本文件中删除所有逗号,除非一行以 # 开头
I want to remove all commas from my text file unless a line starts with #
例如:
a, b, c
#a, b, c
应该转向:
a b c
#a, b, c
我不介意双重扫描文件,但我想用 sed 来做到这一点
I don't mind double scan the file but I want to do that with sed
推荐答案
你可以试试下面的 sed 命令,
You could try the below sed command,
$ sed '/^ *#/!s/,//g' file
a b c
#a, b, c
^
断言我们在开始.所以上面的命令将匹配以零个或多个空格和 #
符号开头的行.然后下面的 !
使 sed 反转选择,即它强制 sed 在不匹配的行上进行替换.s/,//g
用空字符串替换所有逗号.
^
asserts that we are at the start. So the above command will match the lines which starts with zero or more spaces and a #
symbol. Then the following !
makes the sed to inverse the selections ie, it forces the sed to do the replacement on the lines which are not matched. s/,//g
replaces all the commas with an empty string .
通过awk,
$ awk '!/^ *#/{gsub(/,/,"")}1' file
a b c
#a, b, c
!
在开头否定模式.同样,它只会在开头没有 #
的行上进行替换.
!
at the start negates the patten. Likewise , it will do the replacement only on the lines which don't have #
at the start.
这篇关于如果行不以 # 开头,则重复删除标记的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!