如何评论模式块的第一行,其中所有行都应该被注释?

时间:2014-10-23 19:48:39

标签: sed block matching

我有一个这样的模式块:

<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>

两者之间的行数会有所不同。上面的代码适用于方差,但不适用于第一行。如何评论第一行?

谢谢, 约翰

3 个答案:

答案 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>