bash - sed 或 awk 删除具有匹配正则表达式的行和以下行

标签 bash awk sed

我正在过滤日志文件并根据类别类型将其分成几个部分。我让它在 1 个类别上工作:

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

当我搜索不同的字符串并尝试删除该行以及后面的 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

有更好的方法吗?


请求添加:

来源.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

关于bash - sed 或 awk 删除具有匹配正则表达式的行和以下行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52083687/

相关文章:

linux - 验证 tar.gz 没有损坏

bash - 读取 unix 上的文件列表并运行命令

regex - 如何使用 sed 按正则表达式对行进行排序

XMLStarlet 命名空间定义

linux - 如何在以 <fc=ff00> 开头的行后添加字符串 “</font>”,但不添加连续的两行?

Linux 在一行中搜索一个字符串,但替换该行中的另一个字符串

linux - bash 选择循环不起作用

linux - 如何为 linux shell 设置 TERM 环境变量

sed - AWK - 具有不相等字段的过滤器文件

linux - 用于查找第 n 次出现的字符串并打印行号的 shell 脚本