2015-06-20 114 views
0

如何刪除最後一次出現的字符串之前的所有行。就像如果我有一個看起來像刪除字符串的最後一個字母之前的所有行

 
Icecream is good 
And 
Chocolate is good 
And 
They have lots of sugar 

如果我想畢竟行的文件,幷包括「和」什麼是做到這一點的乾淨的方式最後一次出現?具體而言,我想

And 
They have lots of sugar 

我在做sed -n -E -e '/And/,$p' file但我認爲這給了我第一次出現。

+0

添加所需輸出爲樣本輸入。 – Cyrus

+0

請看看:[我應該怎麼做當有人回答我的問題?](http://stackoverflow.com/help/someone-answers) – Cyrus

回答

3

這可能爲你工作(GNU SED):

sed -n '/And/h;//!H;$!d;x;//p' file 

替換含有And行保留空間什麼。將所有其他行追加到保留空間。在文件末尾,交換保存空間的模式空間,並打印出結果,只要它匹配所需的字符串And即可。

+0

謝謝,這工作! – jyu429

+0

看看[這個評論](http://stackoverflow.com/questions/30958584/delete-all-lines-before-last-case-of-a-string#comment49950428_30958584);) – bagrat

+1

你不只是做'sed -n'/ And/h; H; $ {x; p}'' – 123

0

我知道你要求sed,而且波通提供了一個很好的sed解決方案。但是,作爲比較,這裏是一個awk的解決方案:

$ awk 's{s=s"\n"$0;} /And/{s=$0;} END{print s;}' file 
And 
They have lots of sugar 

它是如何工作的:

  • s{s=s"\n"$0;}

    如果變量s不爲空,然後添加到它當前行, $0

  • /And/{s=$0;}

    如果當前行包含And,然後設置s當前行,$0

  • END{print s;}

    後,我們已經達到了文件的末尾,打印s

-2
$ tac file | awk '!f; /And/{f=1}' | tac 
And 
They have lots of sugar 

$ awk 'NR==FNR{if(/And/)nr=NR;next} FNR>=nr' file file 
And 
They have lots of sugar 
+1

請提供說明。 –

+0

不,這是從閱讀任何awk文檔的頁面或2中可以獲得的非常基本的東西,但是我會很樂意回答任何人在花費一點努力爲自己弄明白之後所提出的任何問題。 –

+1

誰在乎它是多麼的基礎。作爲一個有這麼多點的人,你應該很熟悉SO禮儀。你的問題被標記爲質量。由於這是正確的,我所做的只是發表評論。你不能指望人們只是「讀一頁或兩頁」......如果你能這樣做,那麼它就不會那麼受歡迎。事實是,正確與否,你的回答很糟糕。你應該修復它。 –

相關問題