簡體   English   中英

sed命令-正則表達式和行數

[英]sed command - regex and row count

我的文件內容如下:

E error1
error1.2
error1.3
error1.4
error1.5

E error2
error2.2
error2.3
error2.4
error2.5

E error1
error1.2
error1.3
error1.4
error1.5

S not error

我想返回與“ E錯誤”及其后的4行匹配的任何內容。 我可以使用“ sed”進行首次出現:

sed -n '/E/,5p'

但這只會返回第一次出現“ E錯誤”的5行。 對於所有事件,我都需要它,我也想進行重復數據刪除,然后對每種類型的總數進行計數,並在返回的5行下方顯示“ E error1”的事件數。

希望有道理!

使用grep及其-A (之后)選項:

grep -A4 'E error' file

要獲取每種類型的數量,您可以

grep 'E error' file | sort | uniq -c

這是一個適合您的awk ,它將在命中模式后獲得下四行:

awk '/E error/{_=5}_-->0' file
E error1
error1.2
error1.3
error1.4
error1.5
E error2
error2.2
error2.3
error2.4
error2.5
E error1
error1.2
error1.3
error1.4
error1.5

或者您可以使用以下命令:

awk '/E error/{_=5}_&&_--' file

PS, _僅用於娛樂,但類似於任何awk變量名稱。 使其更具可讀性:

awk '/E error/{c=5} c && c--' file
sed -n '/E error/,+4p' inputFile

輸出為

E error1
error1.2
error1.3
error1.4
error1.5
E error2
error2.2
error2.3
error2.4
error2.5
E error1
error1.2
error1.3
error1.4
error1.5

它能做什么?

-n禁止自動打印圖案空間

'/E/,+4匹配出現E行和其后的4

p打印當前模式空間

輸入文件的記錄之間有一個空白行,因此只需將awk Record Separator設置為匹配,您需要做的就是:

awk -v RS= '/^E error/' file

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM