[英]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.