如何使用 grep 匹配前 32 个字母后的模式?

vis*_*m c 4 awk grep

我试图过滤具有模式 04:26 的行。我期待着这个命令,

cat file1.txt | grep -E '04:26'
Run Code Online (Sandbox Code Playgroud)

过滤时间戳后包含 04:26 的行。相反,我也得到了第二行。

文件1.txt

2022-12-23T04:26:47.748412+00:00 raspberrypi dnsmasq-dhcp[698]: DHCPREQUEST(eth0) 192.168.42.17 04:c8:07:23:04:26 
2022-12-23T04:26:47.749307+00:00 raspberrypi dnsmasq-dhcp[698]: DHCPACK(eth0) 192.168.42.17 04:c8:07:23:34:13
Run Code Online (Sandbox Code Playgroud)

如何屏蔽时间戳的前 32 个字母以防止匹配?

anu*_*ava 5

你可以使用这个grep

grep -E '^.{32,}04:26' file

2022-12-23T04:26:47.748412+00:00 raspberrypi dnsmasq-dhcp[698]: DHCPREQUEST(eth0) 192.168.42.17 04:c8:07:23:04:26
Run Code Online (Sandbox Code Playgroud)

分解:

  • ^: 开始
  • .{32,}:匹配32个或更多字符
  • 04:26: 匹配04:26

grep或者你也可以使用这个:

grep ' .*04:26' file
Run Code Online (Sandbox Code Playgroud)

考虑到您想要忽略每行第一个空格之前的时间戳文本。


解决方案awk

awk '$NF ~ /04:26/' file
Run Code Online (Sandbox Code Playgroud)