當前位置:編程學習大全網 - 源碼下載 - linux下如何獲得特定字符串前後幾行文本

linux下如何獲得特定字符串前後幾行文本

這行命令可以幫助妳刪除包含 Merge 的 commit 塊(任意多個這樣的文字塊)

sed?-n?'/commit/{:a;h;n;/Merge/b;:c;H;n;$bd;/commit/!bc;:d;x;p;x;ba}'?log?>?log.txt

運行效果如下:

我的命令可能復雜了些。稍微解釋壹下,僅供參考:

其中:a:b:c:d是命令跳轉標簽label

/commit/{:a;h;n;

當某行找到 commit 時,將此行復制到 hold space,然後讀取下壹行。

/Merge/b;

如果剛剛讀取到的新行,包含Merge,則結束對本行的處理,讀取下壹行,並繼續尋找commit

如果剛剛讀取到的新行,不包含Merge,那麽繼續對本行執行後續命令:

:c;H;n;$bd;/commit/!bc;:d;x;p;x;ba}

將此行追加到hold space,讀取下壹行,如果沒有到最後壹行,並且沒有找到commit,那麽執行命令bc,跳轉到c標簽——循環這個過程,直到讀取到文件末尾或者讀取到包含commit的行。然後,x,將hold space的內容與 pattern space的內容對調,p,輸出pattern space的內容(即,不包含Merge的塊),x,再次對調,pattern space變成之前的內容(文件末尾或者包含commit的行)。ba,跳轉到標簽a,繼續對此行進行檢查,重復步驟1,2,3。

如果上面的命令改為:

sed -n '/commit/{:a;h;n;/Merge/!b;:c;H;n;$bd;/commit/!bc;:d;x;p;x;ba}' log > log.txt

那麽,輸出結果為,只包含 Merge 的 commit 塊

  • 上一篇:中國或者是日本有哪些動漫是由小說改編而成的?
  • 下一篇:牽手app源代碼
  • copyright 2024編程學習大全網