sed - 如何注释应注释所有行的模式 block 的第一行?

标签 sed block matching

我有一个像这样的模式 block :

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

和 之间的行数会有所不同。上面的代码适用于方差,但不适用于第一行。如何获得第一行注释?

谢谢, 约翰

最佳答案

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

关于sed - 如何注释应注释所有行的模式 block 的第一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536213/

相关文章:

css - 使用 .htaccess 阻止目录

r - MatchIT 中标准化差异的公式?

sed - libSVM 自动化标签脚本

regex - sed 插入行命令 OSX

html - 两个 block 之间的空间

ios - 等待很多异步调用执行回调

string - 在两个大文件之间匹配字符串的算法

c++ - C++ 中多个帧的 Blob ID 匹配(图像分析)

php - SED 命令 : won't insert the string I want

regex - 通过shell脚本从文本文件中删除文本 block