如何使用正则表达式从此数据中仅返回第一个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。
答案 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]+)