我在命令行上将多个命令链接在一起。是否有任何工具可以让我从特定模式开始捕获输出?例如,如果我生成了以下输出:
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行不是必须包含的。
答案 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