在文件中查找文本字符串并仅输出其后的其余文本?

Rob*_*ler 7 grep pipe sed awk stdout

我在这个论坛上发现了很多与在文本文件中查找各种值并输出围绕它的文本有关的帖子。但是,我似乎没有找到任何“面向流”。

我想在文件中找到一个特定的字符串,并输出它后面的文本,直到到达文件末尾。换句话说,我想要一些像过滤器一样的东西,它会忽略文件中的文本,直到达到特定的字符串值,然后从那时起将文本输出到标准输出,直到文件结束。我想使用stdout以便我可以选择将输出通过管道传输到文件。

是否有 Linux 文本实用程序可以帮助我执行此操作,如果有,如何操作?或者,如果我需要编写一个 bash shell 脚本来完成此操作,我将使用哪些常规步骤和命令行实用程序来执行此操作?

例如,给出下面的示例文件:

one
two
three
four
five
Run Code Online (Sandbox Code Playgroud)

假设我想输出“三”之后的所有文本,结果将是:

four
five
Run Code Online (Sandbox Code Playgroud)

注意:我确实找到了这个看似相关的帖子,但正如你所看到的,它有点乱:

如何找到文本并复制文本?

pLu*_*umo 10

使用awk

awk 's;/^three$/{s=1}' file
Run Code Online (Sandbox Code Playgroud)

或者

awk 's;$0=="three"{s=1}' file
Run Code Online (Sandbox Code Playgroud)
  • s;如果变量s为真,将打印该行,这是找到模式/单词后的第一次...
  • /^three$/{s=1}s如果找到模式/单词,则将变量设置为 true (1)。


Sté*_*las 9

使用 GNU sed

sed 0,/three/d
Run Code Online (Sandbox Code Playgroud)

请注意,Linux 是一个内核,它没有实用程序。GNUsedsedGNU/Linux 系统(如 Debian GNU/Linux)上常见的实现。GNUsed早于 Linux,并且已经被编译为可以在大多数类 Unix 系统上运行,包括大多数将 Linux 作为其内核运行的系统。它本身是70 年代后期0UNIXsed实用程序的自由、自由和开源重新实现(带有一些扩展,包括该地址)。