從目前行配對到與模式不符的行

從目前行配對到與模式不符的行

我真的嘗試過搜索,但找不到任何東西(很難知道到底要搜索什麼)。

我知道如何做到這一點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 looploop如果行符合則分支/SOMETHING/
  • q如果分支沒有發生。

無論如何,這都會列印一行。 (也許可以透過 G-Man 的回答來解決。)

改編自這個問題

相關內容