如果行不是以 # 开头,则重复删除标记

remove token repeatedly if line does not start with #

我想从我的文本文件中删除所有逗号,除非一行以 #

开头

例如:

a, b, c
#a, b, c

应该转向:

a b c
#a, b, c

我不介意对文件进行两次扫描,但我想用 sed 来做到这一点

你可以试试下面的 sed 命令,

$ sed '/^ *#/!s/,//g' file
a b c
#a, b, c

^ 断言我们处于起点。所以上面的命令将匹配以零个或多个空格和 # 符号开头的行。然后下面的 ! 使 sed 反转选择,即,它强制 sed 对不匹配的行进行替换。 s/,//g 用空字符串替换所有逗号。

通过awk,

$ awk '!/^ *#/{gsub(/,/,"")}1' file
a b c
#a, b, c

! 开头否定了模式。同样,它只会对开头没有 # 的行进行替换。