awk 在 shell 中具有排除模式

问题描述 投票:0回答:1

文本文件有以下名为“log”的行

--- [n-event-group-3] action
--- [n-event-group-8] action.service
--- [n-event-group-2] essing.service.
--- [n-event-group-10] service.
--- [ost-stats-event] host.
--- 1077916, partition: 10, 
--- [d | vm-cm-event] cm.service.
--- [d | vm-cm-eve] cm.service
error: not found
com.rom.nom
--- [-event-group-11] ervice
--- [-event-group-15] ervice
--- [-event-group-20] ervice
--- [-event-group-99] ervice
--- [-event-group-133] ervice
--- [-event-group-13] ervice
--- [-event-group-13] ervice
--- [-event-group-13] ervice

想要 grep 仅包含

[-event-group-13]
的行以及所有没有模式的行
[-event-group-(digits)]

所以需要的结果是

--- [ost-stats-event] host.
--- 1077916, partition: 10, 
--- [d | vm-cm-event] cm.service.
--- [d | vm-cm-eve] cm.service
error: not found
com.rom.nom
--- [-event-group-13] ervice
--- [-event-group-13] ervice
--- [-event-group-13] ervice
--- [-event-group-13] ervice

awk '!/-event-group-/{print} /-event-group-13/{print}' file gives 

--- [ost-stats-event] host.
--- 1077916, partition: 10, 
--- [d | vm-cm-event] cm.service.
--- [d | vm-cm-eve] cm.service
error: not found
com.rom.nom
--- [-event-group-133] ervice  <- don't print this line
--- [-event-group-13] ervice
--- [-event-group-13] ervice
--- [-event-group-13] ervice
shell awk grep
1个回答
1
投票

像这样:

awk '!/-event-group-/{print} /-event-group-13\]/{print}' file
                                             ^^
                                          look here

awk '!/-event-group-/{print} /-event-group-13\y/{print}' file

\y
awk
单词边界

产量:

--- [ost-stats-event] host.
--- 1077916, partition: 10, 
--- [d | vm-cm-event] cm.service.
--- [d | vm-cm-eve] cm.service
error: not found
com.rom.nom
--- [-event-group-13] ervice
--- [-event-group-13] ervice
--- [-event-group-13] ervice
© www.soinside.com 2019 - 2024. All rights reserved.