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

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

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

我想在文件中找到特定的字符串,然后输出仅有的其后的文本,直到到达文件末尾。换句话说,我想要像过滤器一样的东西,它会忽略文件中的文本,直到达到特定的字符串值,然后从该点开始将文本输出到标准输出直到文件末尾。我想用标准输出所以如果我选择的话,我可以将输出传输到文件。

有没有 Linux 文本实用程序可以帮助我做到这一点,如果有的话,如何实现?或者,如果我需要编写 bash shell 脚本来完成此任务,那么我将使用哪些一般步骤和命令行实用程序来完成此操作?

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

one
two
three
four
five

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

four
five

注意:我确实找到了这篇看似相关的文章,但正如你所看到的,它有点混乱:

如何查找文本并复制该文本?

答案1

使用awk

awk 's;/^three$/{s=1}' file

或者

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

答案2

使用 GNU sed

sed 0,/three/d

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

答案3

使用 POSIX sed 您可以执行以下操作:

sed -ne '/three/!d;:a;n;p;ba' inp.file

使用 Perl:

perl -lne 'print if 1 <(/three/...eof)' inp.file

相关内容