Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 使用sed在同一行上匹配相同的图案n次_Shell_Unix_Sed - Fatal编程技术网

Shell 使用sed在同一行上匹配相同的图案n次

Shell 使用sed在同一行上匹配相同的图案n次,shell,unix,sed,Shell,Unix,Sed,我有一个输入文件div.txt,如下所示: <div>a</div>b<div>c</div> <div>d</div> abc D 现在,我想使用sed拾取所有div标记以及它们之间的文本: sed-n's:.\(.*).:\1:p'

我有一个输入文件div.txt,如下所示:

<div>a</div>b<div>c</div>
<div>d</div>
abc
D
现在,我想使用sed拾取所有div标记以及它们之间的文本:

sed-n's:.\(.*).:\1:p'
我得到的结果是:

<div>c</div>
<div>d</div>
c
D
我真正想要的是:

<div>a</div>
<div>c</div>
<div>d</div>
a
C
D
所以问题是,如何在同一条线上匹配相同的图案n次?
(请不要建议我使用perl或python)

Sed不是处理HTML的合适工具

但是如果您确实坚持,并且您知道您的输入将始终具有正确闭合的div标记对,那么您可以用换行符替换div之外的所有内容:

sed 's=</div>.*<div>=</div>\n<div>='
sed's=.*=\n=
这可能适合您(GNU-sed):


sed的/\(\)[^使用支持HTML的工具处理HTML要安全得多。标签之间的文本与周围的标签位于不同的行上如何?@RendoJack解决方案基于您提供的数据。如果有特殊情况,请修改问题并提供它们。
sed 's=</div>.*<div>=</div>\n<div>='
sed 's/\(<\/div>\)[^<]*/\1\n/;/^</P;D' file