在模式匹配之前,有没有办法丢弃输出?

时间:2014-05-06 11:11:11

标签: bash

我在命令行上将多个命令链接在一起。是否有任何工具可以让我从特定模式开始捕获输出?例如,如果我生成了以下输出:

line 1
line 2 
line 3
line 4
my_pattern
line 5
line 6
line 7

是否有一些命令允许我从my_pattern开始捕获输出?这导致行

my_pattern
line 5
line 6
line 7

被捕获。 my_pattern行不是必须包含的。

2 个答案:

答案 0 :(得分:3)

当然,请像这样使用sed

sed -n '/my_pattern/,$p' file
my_pattern
line 5
line 6
line 7

也就是说,在找到my_pattern之前不要打印任何内容(-n),然后从那里打印到文件的末尾。或者在管道中:

.... | sed -n '/my_pattern/,$p'

答案 1 :(得分:1)

您可以像这样使用awk进行此输出重定向:

tail -f /logs/apache_error.log | awk '!found && /my_pattern/{found=1} found'

在输出中找到my_pattern之前,此awk不会产生任何输出,一旦my_pattern出现,tail -f的所有输出文本都将被写入stdout(可以重定向到文件也是如此)。

<强>测试

printf "1\n2\n3\n4\nmy_pattern\n5\n6\n7\n" | awk '!found && /my_pattern/ {found=1} found'
my_pattern
5
6
7