替换一个字符串,包括OS X中另一个字符串的第一个实例

时间:2013-06-12 09:08:29

标签: regex macos sed

我正在尝试用sed(在OS X中)将字符串替换为第二个字符串的第一个实例。不幸的是,我的sed命令将所有内容替换为第二个字符串的最后一个实例。

我的文字:

<li>lorem ipsum</li><li>dolor sit amet</li><li>something</li><li></li>

我需要删除<li>lorem ipsum</li>,以便新行看起来像这样:

<li>dolor sit amet</li><li>something</li><li></li>
不幸的是,我的sed命令取代了整行:

sed -i "" 's:<li>lorem.*</li>::'

你知道怎么用sed来解决这个问题吗?

由于 ALEV

1 个答案:

答案 0 :(得分:1)

我认为最接近你想要的是:

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

(模式意味着包括任何不是“&lt;”的东西,即直到下一个标签)。使用sed,您必须以某种方式决定终止字符或一组有效字符。

然而,最干净的解决方案当然是非贪婪的匹配,但是sed没有提供(参见non greedy regexp),但根据链接使用perl将是一个解决方案:

perl -pe 's:<li>lorem.*?</li>::'