使用脚本文件 (sed -f) 用 sed 替换多行

使用脚本文件 (sed -f) 用 sed 替换多行

基于找到的精彩答案这里,我尝试在sed脚本文件中使用其中一些命令,该脚本文件将使用sed -f.该文件有多个sed命令,并且一直运行没有问题。现在我需要将这两行添加到文件末尾:

/^$/{N;s/^$\nbegin of this/begin/g}
/^$/{N;s/^$\nend of this/end/g}

它基本上搜索空行 ( ^$) ,后跟短语begin of thisor end of this,然后继续删除空行并用beginor替换下一行end

每个命令独立运行都不会出现任何问题,但是当放入脚本文件中时,就会出现问题。我以前的一些命令停止工作(即s/\\ \\ //g仅删除字符串\ \)。更重要的是,只有前两个多行命令中的第一个被执行,为什么?我是否缺少一些命令行开关sed?同一脚本文件中是否可以有多个多行命令?

作为额外的“点”,我很想用捕获组替换这两个正则表达式行,但这/^$/{N;s/^$\n(begin|end) of this/\1/g}也不起作用,甚至不能直接在命令行上运行它。

我真的希望这有一个相对简单/可行的解决方案,因为我宁愿不使用perlor awk,但如果这是其本身的限制sed或者实现起来非常复杂,我会(非常不情愿地)使用替代方案。

这是一个非常基本的示例文本:

some text

begin of this
some more text

end of this

A sentence

Another sentence 

最终应该是这样的:

some text
begin
some more text
end

A sentence 

Another sentence 

答案1

我认为@seshoumara 解决了这个问题,对吗?不管怎样,我想出了这个

sed  -r '/^$/{N; s/\n(begin|end) of this/\1/g}' file

相关内容