2013-06-12 191 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

    相關問題