在特定单词的第一次匹配后grep所有行。输出应排除匹配的行

时间:2017-09-04 06:05:31

标签: linux unix awk sed grep

 $cat data
 123
 ABC
 DEF
 GHI
 ABC
 EFG

输出应为

DEF
GHI
ABC
EFG

匹配单词将为“ABC”。因此,它将检测第一次出现的单词“ABC”,并将在匹配行

后的下一行中打印

2 个答案:

答案 0 :(得分:1)

awk 解决方案:

awk '/ABC/ && !f{ f=1;next }f' file
  • /ABC/ && !f - 遇到ABC行并使用未设置标记/标记!f时 - 将标记f=1设置为第一次出现{{1}的指示符1}}行; ABC - 跳过当前的模式行

  • next - 设置标记/标记时打印行

输出:

f

答案 1 :(得分:0)

$ sed '1,/ABC/d' data
DEF
GHI
ABC
EFG

这会将sedd)的删除功能应用于1到/ABC/范围内的所有行(与模式ABC匹配的第一行)。这会删除前几行,包括包含ABC的行。

打印所有行的默认操作将应用于其余行。

使用awk

$ awk '/ABC/ && !f && f = 1 { next } f' data
DEF
GHI
ABC
EFG

如果在一行中找到ABC并且未设置f,请将f设置为1并跳至下一行。如果设置了f,则打印该行,否则丢弃输入。