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