2013-06-12 193 views
1

我试图用sed替换字符串到第二个字符串的第一个实例(在OS X中)。不幸的是,我的sed命令将所有内容都替换为第二个字符串的最后一个实例。替换一个字符串直到并包括OS X中的另一个字符串的第一个实例

我的文字:

<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>::' 

你有一个想法如何s这与sed?

感谢 ALEV

+0

什么' sed's:

  • lorem。[az] *
  • ::''? – fedorqui

    +0

    工程就像一个魅力。谢谢 ! – AleV

    +2

    更一般地说,'sed's:

  • lorem [^ <]*
  • ::' - 这并不假定你只有文字中的字母。但是,正则表达式通常无法解析非常规语言的XML:您应该查找XML或HTML解析器。 –

    回答

    1

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

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

    (模式意味着包括任何不是“<”,即到下一个标签)。在sed中,你必须以某种方式决定终止字符或一组有效字符。

    最干净的解决方案却是当然是非贪婪的比赛,但sed的不提供该(见non greedy regexp),但用perl会根据链接是一个解决办法:

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

    感谢您的回答! – AleV

    +0

    如果确实有帮助,请点击复选标记(标记为正确)。 – Grezgory

    相关问题