Sed 匹配模式追加行但排除模式行

Sed 匹配模式追加行但排除模式行,sed,awk,Sed,Awk,我想补充一点 <br \> 在标记之间每行的末尾 <div> ... </div> 。。。 源文件 bla bala <div> bla bala bla bala bla bala </div> bla bala blabala 布拉巴拉 布拉巴拉 布拉巴拉 布拉巴拉 我想把它放出去,就像 bla bala <div> bla bala <br \> bla bala

我想补充一点

 <br \> 

在标记之间每行的末尾

 <div> ... </div>
。。。
源文件

 bla bala
 <div>
 bla bala
 bla bala
 bla bala
 </div>
 bla bala
blabala
布拉巴拉
布拉巴拉
布拉巴拉
布拉巴拉
我想把它放出去,就像

 bla bala
 <div>
 bla bala <br \>
 bla bala <br \>
 bla bala <br \>
 </div>
 bla bala
blabala
布拉巴拉
布拉巴拉
布拉巴拉
布拉巴拉
我尝试过这个,但它也增加了标记行

 sed -i '' '/<pre\>/,/<\/pre\>/ s/$/<br \\>/' test.txt
sed-i''//,//s////'test.txt
我也试过这个

 sed -i '' '/<pre\>/,/<\/pre\>/{/$/<br \\>/;}' test.txt
sed-i''//,/{/$//;}test.txt
如何排除具有匹配图案的线条


更新:你能用sed做到这一点吗?

类似这样的东西使它:

$ awk '/<\/div>/ {p=0} p{$0=$0"<br \>"} /<div>/ {p=1} 1' file
bla bala
<div>
bla bala<br \>
bla bala<br \>
bla bala<br \>
</div>
bla bala
$awk'/{p=0}p{$0=$0“”}/{p=1}1”文件
布拉巴拉
布拉巴拉
布拉巴拉
布拉巴拉
布拉巴拉
sed

sed '/<div>/,/<\/div>/s/[^>]$/<br \/>/' test.html
替换命令(简化):

另一种仅将替换应用于
标记之间的行的解决方案可能如下所示(可能更干净、更一般):

sed'//,//{//n;//!{s/$//}}test.html
如上例所示,它将选择范围,包括开始和结束div标记以及它们之间的线,但随后使用
n
命令跳过开始
标记,使用
命令跳过结束
。有关更多信息,请查看


然而,尽管我喜欢使用
sed
,但我不会在实际应用程序中使用正则表达式来操作html或xml文档。我会使用它。

这可能适合您(GNU-sed):

sed'/,/!b、 //!s/$//'文件

Sed有一个功能,其中一个空的regexp接受前面的regexp值。

您在使用正则表达式解析
html
时遇到了问题。好的,hek2gml用
Sed
给出了一个很好的答案。我用
awk
发布了文章,所以我们一起讨论了您用于提问的两个标签。
/<div>/,/<\/div>/
s/$/<br \/>/
s/[^>]$/<br \/>/
 sed '/<div>/,/<\/div>/ {/<div>/n; /<\/div>/ ! {s/$/<br \/>/}}' test.html
sed '/<div>/,/<\/div>/!b;//!s/$/ <br \\>/' file