Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何grep一个特定的模式,并打印该模式上方和下方的所有内容,直到达到一个指标(LINUX)?_Linux_Awk_Sed_Grep - Fatal编程技术网

如何grep一个特定的模式,并打印该模式上方和下方的所有内容,直到达到一个指标(LINUX)?

如何grep一个特定的模式,并打印该模式上方和下方的所有内容,直到达到一个指标(LINUX)?,linux,awk,sed,grep,Linux,Awk,Sed,Grep,所以我试着对一个特定的模式进行grep,然后将该模式上下的所有内容打印到一个特定的指示器上。我不知道这在grep中是否可行,或者我是否应该使用其他工具,如awk、sed或生成一些shell脚本。因此,如果我有以下几点: --------------- ..... process: failed ...... ---------------- 及 我希望grep为“process:freezed”,并希望在找到“process:freezed”时所有内容都在虚线之间。然而,虚

所以我试着对一个特定的模式进行grep,然后将该模式上下的所有内容打印到一个特定的指示器上。我不知道这在grep中是否可行,或者我是否应该使用其他工具,如awk、sed或生成一些shell脚本。因此,如果我有以下几点:

---------------
     .....
process: failed
     ......
----------------


我希望grep为“process:freezed”,并希望在找到“process:freezed”时所有内容都在虚线之间。然而,虚线之间的行数可能会因不同的“process:freezed”消息而有所不同,因此我无法计算上面或下面的行数并使用grep的-A和-B选项。先谢谢你

我将使用GNU
awk
并将记录分隔符设置为包含16个hypens的字符串:

awk '/process: (failed|frozen)/' RS='-{16}' input.file

您只需删除
sed
中包含
进程:冻结
进程:失败
消息的行即可

sed "/process: frozen/d"

不起作用
^
$
并不是指行的开始和结束,而是指在此上下文中的输入。另外,regex
RS
是特定于gawk的。乍一看,它应该可以工作,而且总体上这个想法还不错。为了安全起见,我可能会使用
RS='\n-+\n'
。虽然这可能导致第一行和最后一行分隔符进入输出,但必须将其
sub
ed输出。我想这取决于分隔符行之间可能出现的内容。无论如何,它显示了一般原则,在遇到困难时可以直接修改。对我来说已经足够好了。是的,正在生成的消息在分隔符行之间不会有“-”。因此,它应该适用于所有场景。但是我想我会谨慎行事,使用RS='-{16}',您可以使用
ORS
(输出记录分隔符)变量。如下所示:
awk'/process:(failed | freezed)/'RS='-{16}'ORS='------------'input.file
sed "/process: frozen/d"