簡體   English   中英

sed或awk刪除匹配正則表達式的行以及以下行

[英]Sed or awk to remove line with matched regex and following lines

我正在過濾日志文件,並根據類別類型將其分為幾部分。 我將其用於1個類別:

sed -e '/Associating reconciliation identity to/{N;N;d}' source.log  > destination.txt

當我搜索其他字符串並嘗試刪除THAT行以及隨后的7行時,出現了我遇到的問題。 我不是100% sed是最好的工具,但我還沒有得到awk在所有的工作。 根據上面的示例,我認為這應該可行:

sed -e '/Found multiple matches (instances) for class/{N;N;N;N;N;N;N;N;d}' source.log  > destination.txt

有沒有更好的辦法?


要求添加:

Source.log

<ERROR   > <TID: 140100592498432> /* Wed Aug 29 2018 05:18:20.7938 */ Found multiple matches (instances) for class <Software.Class> in look-up dataset <Category> 

<ERROR   > <TID: 140100592498432> /* Wed Aug 29 2018 05:18:20.7939 */ for qualification <'Name' != $\NULL$ AND 'Name' = $Name$> of group <Job-ID> with values 

<ERROR   > <TID: 140100592498432> /* Wed Aug 29 2018 05:18:20.7939 */ < Name = software.example >

<ERROR   > <TID: 140100592498432> /* Wed Aug 29 2018 05:18:20.7939 */ < RelLeadClassId = NULL >

<ERROR   > <TID: 140100592498432> /* Wed Aug 29 2018 05:18:20.7939 */ < RelLeadInstanceId = NULL >

<ERROR   > <TID: 140100592498432> /* Wed Aug 29 2018 05:18:20.7939 */ < RequestId = 00000000000|00000000000|000000000000 >

<ERROR   > <TID: 140100592498432> /* Wed Aug 29 2018 05:18:20.7939 */ < Secondary_UID = NULL >

<ERROR   > <TID: 140100592498432> /* Wed Aug 29 2018 05:18:20.7939 */ < TokenId = HashToken87hnUIKW22er4xbs78== >






<ERROR   > <TID: 140100593551104> /* Wed Aug 29 2018 05:18:20.7946 */ Found multiple matches (instances) for class <Software.Class> in look-up dataset <Category> 

<ERROR   > <TID: 140100593551104> /* Wed Aug 29 2018 05:18:20.7946 */ for qualification <'Name' != $\NULL$ AND 'Name' = $Name$> of group <Job-ID> with values 

<ERROR   > <TID: 140100593551104> /* Wed Aug 29 2018 05:18:20.7946 */ < Name = software.version >

<ERROR   > <TID: 140100593551104> /* Wed Aug 29 2018 05:18:20.7946 */ < RelLeadClassId = NULL >

<ERROR   > <TID: 140100593551104> /* Wed Aug 29 2018 05:18:20.7946 */ < RelLeadInstanceId = NULL >

<ERROR   > <TID: 140100593551104> /* Wed Aug 29 2018 05:18:20.7946 */ < RequestId = 000000000|000000000000|000000000000>

<ERROR   > <TID: 140100593551104> /* Wed Aug 29 2018 05:18:20.7946 */ < SERVICE_NOW_UID = NULL >

<ERROR   > <TID: 140100593551104> /* Wed Aug 29 2018 05:18:20.7946 */ < TokenId = HashTokenHHK72nsyUIOI92bYH== >

嘗試這個:

sed -e '/<search string here>/,+7d' source.log  > destination.txt

這將為您工作:

grep -A7 -P 'regexhere' file| xargs -I {} sed -i.bak 's/{}//g' 1txt 

說明:

grep -A7在正則表達式匹配后找到下7行-P是grep中的perl正則表達式

然后我們使用xargs從grep捕獲輸出作為行,並在sed命令中使用整行作為替換。

-i.bak選項僅創建我們要更改的文件的備份

PS:以上代碼將刪除行,您隨時可以選擇替換以及修改。

暫無
暫無

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

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