基于找到的精彩答案这里,我尝试在sed
脚本文件中使用其中一些命令,该脚本文件将使用sed -f
.该文件有多个sed
命令,并且一直运行没有问题。现在我需要将这两行添加到文件末尾:
/^$/{N;s/^$\nbegin of this/begin/g}
/^$/{N;s/^$\nend of this/end/g}
它基本上搜索空行 ( ^$
) ,后跟短语begin of this
or end of this
,然后继续删除空行并用begin
or替换下一行end
。
每个命令独立运行都不会出现任何问题,但是当放入脚本文件中时,就会出现问题。我以前的一些命令停止工作(即s/\\ \\ //g
仅删除字符串\ \
)。更重要的是,只有前两个多行命令中的第一个被执行,为什么?我是否缺少一些命令行开关sed
?同一脚本文件中是否可以有多个多行命令?
作为额外的“点”,我很想用捕获组替换这两个正则表达式行,但这/^$/{N;s/^$\n(begin|end) of this/\1/g}
也不起作用,甚至不能直接在命令行上运行它。
我真的希望这有一个相对简单/可行的解决方案,因为我宁愿不使用perl
or 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