2013-09-23 493 views
0

我有一個帶有html內容的.sql轉儲。我想從<img...>字符串中刪除標題=「....」。棘手的部分是,這些標題=「.....」等出現在<href.....>部分的一行。在sed中替換搜索字符串中的字符串

爲了使它更加明顯我用下面的字符串2行文件:

A B C D B C A B C 
Y B C D B C Y B C 

在B reprecents的title="...."部分和A....C<img....>部分

生成的文件應該像

A C D B C A C 
Y B C D B C Y B C 

只有B應該在A...C內移除和第二行應該是未觸及的

我使用sed,因爲我知道這個最好,但如果有人知道我有興趣知道更好的方法。

直到現在我用下面的命令

cat file |sed '/A/ s/B/X/g' 

問題是,它也取代了BD...C

A C D C A C 
Y B C D B C Y B C 

任何想法將appriciated。

問候,

阿爾揚

PS:真實生活中的例子,只有一行:

nbsp;</p><p> <img src="images/vlaggen/dene_vlag.png" border="0" alt="Vlag van Denemarken" title="REMOVE THIS TITLE" width="75" height="50" align="left" /> <a href="images/hov.png" target="_blank" title="DONT REMOVE THIS TITLE"><img src="images/small.png" border="0" alt="Kaart van Denemarken" title="REMOVE THIS TITLE" align="right" /></a> <br /><br /> </p><p>&nbsp;</p><h1>Title of page</h1> 
+0

一號線的解決方案: - 編寫自定義的解析器(搜索模式和刪除後續字符串) –

+2

恐怕除非你發佈一個例子,您會收到類似'的sed的響應/ ABC/AC/g'文件'爲例。 – devnull

+0

的確如此。我對此很清楚。要有一個真實的例子,這是一個真實數據的例子。請注意,標題=「....」可能在其他地方以及其他數量的出現在一行中。我上面添加了一個真實的例子。 –

回答

0

我想你想要的這裏是一個非貪婪的正則表達式,一些東西,sed中沒有按」 t支持。但是,this question提供了一個潛在的解決方案。我沒有測試這一點,但也許事情大致如下將幫助:

perl -pe 's|<img(.*?)title=".*?"(.*?)>|<img\1\2>|g' 

這是早期我在哪裏,但該要點是「找到的img標籤,捕捉一切,是不是標題屬性,並在最後用它替換

+0

完美!這正是我想要的。我將掃描文件的其餘部分,但看起來它運行得很好。我真的需要深入探索perl,這是非常強大的。你救了我的一天!非常感謝你! –

+0

如果它滿足您的需求,那麼您可以將其標記爲已接受。更多點爲我! :) – chooban

0

我敢肯定,肯定我是否得到了正確的問題...但我認爲你需要反向引用,嘗試這樣的事情:

sed 's/\(A\) B \(C\)/\1 \2/g' 

結果:

ACDBCAC

YBCDBCYBC