我在这个论坛上发现了很多帖子,这些帖子与在文本文件中查找各种值并输出其周围的文本有关。但是,我似乎没有找到任何“面向流”。
我想在文件中找到特定的字符串,然后输出仅有的其后的文本,直到到达文件末尾。换句话说,我想要像过滤器一样的东西,它会忽略文件中的文本,直到达到特定的字符串值,然后从该点开始将文本输出到标准输出直到文件末尾。我想用标准输出所以如果我选择的话,我可以将输出传输到文件。
有没有 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 是一个内核,它没有实用程序。 GNUsed
是sed
GNU/Linux 系统(如 Debian GNU/Linux)上常见的实现。 GNUsed
早于 Linux,并且已被编译为在大多数类 Unix 系统上运行,包括大多数运行 Linux 作为内核的系统。它本身是70 年代末0
UNIX 实用程序的免费、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