我有一个这样的模式块:
<domain hotmail.com>
blah
blah
blah
</domain>
我希望最终输出看起来像这样:
#<domain hotmail.com>
#blah
#blah
#blah
#</domain>
使用此命令我可以获得除第一行以外的所有行,即启动模式:
sed -e "/\(^<domain hotmail.com>\)/{:a;n;s/^/#/;/<\/domain>/!ba;}" file
哪位给我这个:
<domain hotmail.com>
#blah
#blah
#blah
#</domain>
两者之间的行数会有所不同。上面的代码适用于方差,但不适用于第一行。如何评论第一行?
谢谢, 约翰
答案 0 :(得分:2)
sed '/<domain hotmail\.com>/,/<\/domain>/ s/^/#/'
测试:
sed '/<domain hotmail\.com>/,/<\/domain>/ s/^/#/' <<END
foo
<domail yahoo.com>
blah
blah
</domain>
qux
<domain hotmail.com>
blah
blah
blah
</domain>
bar
<domain gmail.com>
blah
</domain>
baz
END
foo
<domail yahoo.com>
blah
blah
</domain>
qux
#<domain hotmail.com>
#blah
#blah
#blah
#</domain>
bar
<domain gmail.com>
blah
</domain>
baz
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed '/^<domain hotmail.com>$/{:a;N;/^<\/domain>$/M!ba;s/^/#/Mg} file
这将标记if和仅当两个标记都存在时的标记和值。
答案 2 :(得分:0)
sed 's/^/#/'
示例:强>
sdlcb@ubuntu:~/AMD_C$ cat file
<domain hotmail.com>
blah
blah
blah
</domain>
sdlcb@ubuntu:~/AMD_C$ sed 's/^/#/' file
#<domain hotmail.com>
#blah
#blah
#blah
#</domain>