
我真的嘗試過搜索,但找不到任何東西(很難知道到底要搜索什麼)。
我知道如何做到這一點sed
:從當前行列印直到匹配某些內容的行:
sed -n '/1/,/SOMETHING/p'
但是我該如何做同樣的事情,但從當前行列印到才不是匹配某些東西?
例如透過管道將其輸入sed
:
blah blah SOMETHING blah blah
blah blah SOMETHINGblahblahblah
SOMETHING blah blah
NO MATCH HERE
然後我想過濾掉並僅列印前 3 行(但“3”可能會有所不同)。
答案1
這可能不像您真正想要的那麼普遍,但這是一個起點:
sed -n '/SOMETHING/!q;p'
這表示:檢查與 的匹配/SOMETHING/
。如果線不匹配(用於!
反轉測試結果),然後退出。否則,列印此行並繼續下一行。
這不夠靈活,無法立即允許您執行您所要求的操作,以及對文件的其他操作,所有這些都在同一個sed
命令中。
答案2
您可以嘗試循環sed
:
$ sed -n '{:loop p; n; /SOMETHING/b loop; q}' test.txt
blah blah SOMETHING blah blah
blah blah SOMETHINGblahblahblah
SOMETHING blah blah
這:
:loop
建立一個名為loop
p
列印目前行n
取得下一行/SOMETHING/b loop
loop
如果行符合則分支/SOMETHING/
q
如果分支沒有發生。
無論如何,這都會列印一行。 (也許可以透過 G-Man 的回答來解決。)
改編自這個問題。