使用正则表达式获取第一个IP?

时间:2017-09-07 18:54:31

标签: regex grep ip

如何使用正则表达式从此数据中仅返回第一个dst IP?

ipv4     2 udp      17 34 src=192.168.1.76 dst=192.168.1.254 sport=198 dport=53 packets=1 bytes=65 src=192.168.1.254 dst=192.168.1.76 sport=53 dport=198 packets=1 bytes=105 mark=0 use=2

通缉结果:192.168.1.254

我尝试过:

dst=([0-9]{1,3}\.){3}[0-9]{1,3}

这将返回第1和第2个dst IP。

演示:https://regex101.com/r/anONgm/2

2 个答案:

答案 0 :(得分:2)

如果这个问题的措辞只是"我怎样才能从这些数据中返回第一个dst IP?",那么答案就是GNU awk的答案:

$ awk 'match($0,/dst=([^ ]+)/,a){print a[1]}' file
192.168.1.254

或与任何awk:

$ awk 'match($0,/dst=[^ ]+/){print substr($0,RSTART+4,RLENGTH-4)}' file
192.168.1.254

这适用于任何UNIX机箱上的任何shell中的任何sed。

btw使用一些在线工具验证regexp只是证明你有一个可以在该在线工具中使用的正则表达式。它通常对创建正则表达式以在其他工具中运行没有用,因为它们都使用不同的正则表达式(例如BRE与ERE对比PCRE)以及它们自己的限制和/或扩展。

答案 1 :(得分:1)

您可以尝试将所有字符都带到空白处。检查一下;

dst=([\S]+)