我正在尝试用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
答案 0 :(得分:1)
我认为最接近你想要的是:
sed -i "" 's:<li>lorem[^<]*</li>::'
(模式意味着包括任何不是“&lt;”的东西,即直到下一个标签)。使用sed,您必须以某种方式决定终止字符或一组有效字符。
然而,最干净的解决方案当然是非贪婪的匹配,但是sed没有提供(参见non greedy regexp),但根据链接使用perl将是一个解决方案:
perl -pe 's:<li>lorem.*?</li>::'