从bash输出中排除一个字符串

use*_*814 4 linux bash

我正在做一个项目。在这个项目中,由于某些原因,我需要从与模式匹配的输出(或文件)中排除第一个字符串。困难在于我只需要从流中排除一个字符串,仅排除第一个字符串。例如,如果我有:

1 abc
2 qwerty
3 open
4 abc
5 talk
Run Code Online (Sandbox Code Playgroud)

经过一些脚本工作后,我应该这样:

2 qwerty
3 open
4 abc
5 talk
Run Code Online (Sandbox Code Playgroud)

注意:我对单词之前的数字一无所知,因此无法使用有关它们的知识来过滤输出。

我已经用grep编写了小脚本,但是它切出了与模式匹配的每个字符串:

'some program' | grep -v "abc"
Run Code Online (Sandbox Code Playgroud)

阅读有关awk,sed等的信息,但不知道我是否可以解决我的问题。有什么帮助,谢谢。

Sto*_*ica 5

使用awk:

some program | awk '{ if (/abc/ && !seen) { seen = 1 } else print }'
Run Code Online (Sandbox Code Playgroud)

或者,仅使用过滤器:

some program | awk '!/abc/ || seen { print } /abc/ && !seen { seen = 1 }'
Run Code Online (Sandbox Code Playgroud)