3

这是一个简单的问题,我不确定我是否能够使用 sed/awk 来做到这一点 我怎样才能让 sed 搜索这 3 行并替换为具有确定字符串的行?

<Blarg>
<Bllarg>
<Blllarg>

用。。。来代替

<test>

我尝试使用 sed"s/<Blarg>\n<Bllarg>\n<Blllarg>/<test>/g"但它似乎没有找到这些行。可能是我的换行符 (?) \n。我错过了什么吗?

4

3 回答 3

5

因为 sed 通常一次只处理一行,所以您的模式永远不会匹配。试试这个:

sed '1N;$!N;s/<Blarg>\n<Bllarg>\n<Blllarg>/<test>/;P;D' filename
于 2012-08-29T13:57:09.153 回答
3

这可能对您有用:

sed '/<Blarg>/ {N;N;s/<Blarg>\n<Bllarg>\n<Blllarg>/<test>/}' <filename>

它的工作原理如下:

  • 搜索文件直到<Blarg>找到
  • 然后使用以下两行附加到当前模式空间N;N;
  • 检查当前模式空间是否匹配<Blarg>\n<Bllarg>\n<Blllarg>
  • 如果是这样,则将其替换为<test>
于 2012-08-29T13:49:51.850 回答
0

You can use range addresses with regular expressions an the c command, which does exactly what you are asking for:

sed '/<Blarg>/,/<Blllarg>/c<test>' filename
于 2021-07-01T17:26:33.650 回答