1

我有以下字符串:

<li>something</li><li>lorem <a href="URL">link</a>ipsum</li><li>dolor sit</li><li>something</li><li>lorem <a href="URL">link</a>ipsum</li><li></li>

使用 sed 我想删除<li>lorem <a href="URL">link</a>ipsum</li>此行和下一行中的所有实例。

我有以下命令将删除所有实例<li>lorem ipsum</li>

sed -i "" 's:<li>lorem[^<]*</li>::g'

但不幸的是,它无法处理(忽略)<a href="URL">link</a>替换模式中的标签。

有什么建议么?

谢谢 AleV

4

2 回答 2

3

为此,您最好使用xml解析器。但是,如果您必须这样做,那么这是一种在perl.

perl -pe 's,(?<=</li>)<li>lorem.+?</li>(?=<li>),,g' inputFile

测试:

$ cat file
<li>something</li><li>lorem <a href="URL">link</a>ipsum</li><li>dolor sit</li><li>something</li><li>lorem <a href="URL">link</a>ipsum</li><li></li>
$ perl -pe 's,(?<=</li>)<li>lorem.+?</li>(?=<li>),,g' file
<li>something</li><li>dolor sit</li><li>something</li><li></li>
于 2013-06-12T13:07:30.520 回答
1

你可以试试这个(sed),但我不能在 OS X 上测试它:

sed  -E 's:<li>lorem (<[^>]*>\S*){2}</li>::g' file

输入:

<li>something</li><li>lorem <a href="URL">link</a>ipsum</li><li>dolor sit</li><li>something</li><li>lorem <a href="URL">link</a>ipsum</li><li></li>

所需的输出:

<li>something</li><li>dolor sit</li><li>something</li><li></li>

我的输出:

<li>something</li><li>dolor sit</li><li>something</li>

如您所见,最后有一个小的差异。所以通过解析htmlxml一个好主意。您可以获得一条线路的解决方案,但不适用于下一条线路。

于 2013-06-12T14:23:08.190 回答