如何grep一个特定的模式,并打印该模式上方和下方的所有内容,直到达到一个指标(LINUX)?
所以我试着对一个特定的模式进行grep,然后将该模式上下的所有内容打印到一个特定的指示器上。我不知道这在grep中是否可行,或者我是否应该使用其他工具,如awk、sed或生成一些shell脚本。因此,如果我有以下几点:如何grep一个特定的模式,并打印该模式上方和下方的所有内容,直到达到一个指标(LINUX)?,linux,awk,sed,grep,Linux,Awk,Sed,Grep,所以我试着对一个特定的模式进行grep,然后将该模式上下的所有内容打印到一个特定的指示器上。我不知道这在grep中是否可行,或者我是否应该使用其他工具,如awk、sed或生成一些shell脚本。因此,如果我有以下几点: --------------- ..... process: failed ...... ---------------- 及 我希望grep为“process:freezed”,并希望在找到“process:freezed”时所有内容都在虚线之间。然而,虚
---------------
.....
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"
不起作用
^
和$
并不是指行的开始和结束,而是指在此上下文中的输入。另外,regexRS
是特定于gawk的。乍一看,它应该可以工作,而且总体上这个想法还不错。为了安全起见,我可能会使用RS='\n-+\n'
。虽然这可能导致第一行和最后一行分隔符进入输出,但必须将其sub
ed输出。我想这取决于分隔符行之间可能出现的内容。无论如何,它显示了一般原则,在遇到困难时可以直接修改。对我来说已经足够好了。是的,正在生成的消息在分隔符行之间不会有“-”。因此,它应该适用于所有场景。但是我想我会谨慎行事,使用RS='-{16}',您可以使用ORS
(输出记录分隔符)变量。如下所示:awk'/process:(failed | freezed)/'RS='-{16}'ORS='------------'input.file
sed "/process: frozen/d"