我有一个示例文件:
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
但这只是#首次出现的文字。任何帮助将不胜感激。
答案 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
清除保留空间。