2013-08-16 272 views
0

我需要提取(使用sed或grep)兩個字符串之間的子字符串。使用sed獲取兩個字符串之間的字符串

的問題是,之前和之後的字符串是用雙引號,空格等html標籤...

這是我想提取的文本行的一個示例:

12pt;">TEXT_TO_GET</span></div></message> 

歡迎任何幫助,在此先感謝;)

回答

0

從表面上看,你可以使用sed

sed 's%12pt;">\(.*\)</span></div></message>%\1%' 

或:

sed -n '/12pt;">\(.*\)<\/span><\/div><\/message>/ s%12pt;">\(.*\)</span></div></message>%\1%p' 

第一打印出不匹配的行不變;第二隻打印出匹配的線。

但是,這是尋找一個非常嚴格的背景;如果這正是你想要的,那很棒,但是如果你需要改變一些東西,它會很快變得混亂。然而,沒有任何跡象表明需要適應哪些變化,不可能更可靠地給出更靈活的答案。

+0

Nop,那個sed打印整行,我只需要打印中間的文本(例子中的TEXT_TO_GET),我需要的輸出只是它。沒有任何變化,我從文件中獲得一些行,grep他們並獲得一些輸出,其中大部分是html,並且我需要提取一個子字符串,正如我在第一篇文章中所說的那樣。 「之前和之後」子字符將永遠是相同的(我放在那裏的那些) – user2266881

+0

現在,再次閱讀您的文章,我thik你不明白問題xD;我在第一篇文章中提到的不是整條線,只是它的一部分,之前有更多的東西,但那些子串只出現一次,總是按照這個順序等等。 – user2266881

+0

這兩個命令,當餵你的時候輸入行,給你'TEXT_TO_GET'作爲輸出。它們之間的區別在於是否有其他線路與模式不匹配。第一條命令然後回顯那些其他行(不變),第二條命令不回顯它們。這似乎是你在問題和評論中所要求的......你嘗試了我給你的東西嗎? –

相關問題