grep/sed/awk 或使用 regex/linux 命令提取文件中的某些信息

grep/sed/awk 或使用 regex/linux 命令提取文件中的某些信息

我有包含此输出的文件,并且我正在尝试从我的文件中收集有用的数据。

R1#show ip route 192.168.5.130
Routing Descriptor Blocks:

  * 192.168.5.128, from 192.168.5.162, 00:20:16 ago, via Serial0/0/0.2

      Route metric is 2172416, traffic share count is 1

      Total delay is 20100 microseconds, minimum bandwidth is 1544 Kbit/sec

      Reliability 255/255, minimum MTU 1500 bytes

      Loading 1/255, Hops 1

我想 grep match 如果我上面的段落有单词“metric”,那么它应该显示整个段落而不仅仅是该行。

还有一种方法可以检查条件:如果 metric==2172416 则返回整个段落。

我想知道最简单的方法,因为我将在不同的场景中应用它。

另外,如果我的文件中有此内容,如何才能仅获取 4 月 11 日的行?我可以在这里使用通配符吗?

CPU0:Apr 11 05:22:04.768 UTC: pim[1182]: %ROUTING-IPV4_PIM-5-INTCHG : 

CPU0:Apr 11 05:22:04.769 UTC: pim[1182]: %ROUTING-IPV4_PIM-5-NBRCHG : 

CPU0:Apr 11 05:22:04.769 UTC: pim[1182]: %ROUTING-IPV4_PIM-5-NBRCHG : 

CPU0:Apr 11 06:09:53.066 UTC: pim[1182]: %ROUTING-IPV4_PIM-5-INTCHG : 

CPU0:Apr 11 06:09:53.066 UTC: pim[1182]: %ROUTING-IPV4_PIM-5-NBRCHG : 

CPU0:Apr 11 06:09:56.707 UTC: pim[1182]: %ROUTING-IPV4_PIM-5-NBRCHG : 

答案1

awk '/Route metric is 2172416/,/Loading/' file.txt

上面的命令打印行从路由度量为 2172416并以加载中线

awk '/Apr 11/' second_file.txt
grep 'Apr 11' second_file.txt

上面的命令将打印具有4月11日。你也可以使用 grep

答案2

假设第一个文件中的数据与您显示的完全一样,有空行,您可以使用 GNU grep(或其他一些)并询问周围的上下文:

grep -B 5 -A 6 -F 'Route metric is 2172416' file

这将返回匹配之前的 5 行上下文,以及匹配之后的 6 行上下文,以及包含固定字符串 的行Route metric is 2172416

要获取所有提及的行Apr 11

grep -F 'Apr 11' file

或者,如果您需要更具体的匹配标准

grep '^CPU0:Apr 11' file

...这要求给定的模式在行的开头匹配。

相关内容