Sed切换对搜索字符串的评论

时间:2016-11-22 13:49:20

标签: bash sed

我有一个示例文件:

abcd
1234
asdfg
#text = "1234"
text = "1234, 2345"
abc
def.

我想切换评论#text。*像这样:

abcd
1234
asdfg
text = "1234"
#text = "1234, 2345"
abc
def.

再次:

abcd
1234
asdfg
#text = "1234"
text = "1234, 2345"
abc
def.

我正在尝试使用此命令:

sed -i '/text/ s/^#*/#/' file

但这只是#首次出现的文字。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

试试这个:

sed '/^#*text/{s//#&/;s/##text/text/}' file

或者,更短:

sed '/^#*text/{s//#&/;//s/##//}' file

#插入以text开头的行的开头(并包含可选的前导#)。换句话说:

  • ^text将替换为#text
  • 在删除前导^#text之前,
  • ##text将替换为##

答案 1 :(得分:1)

sed -i "s/^#text/__temp__/;s/^text/#text/;s/__temp__/text/" file

答案 2 :(得分:0)

sed -n -e '/^[^text]/ H; /^text/ { s/^text/#text/; x; s/\n#text/\ntext/g; G; s/^\n//g; p; s/.*//; h;}; $ {x; s/^\n//g; p;}'

我用:

s/^\n//g

用于清除尾随保留空间的新行和

s/.*//;h

清除保留空间。