我有以下字符串:
<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
答案 0 :(得分: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>
答案 1 :(得分: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>
正如您所看到的,最后有一点不同。因此,html解析xml或regex 不是一个好主意。您可以获得一行的解决方案,但不适用于下一行。