在DST =之后的正则expression式,而不是在SRC =之后

我正在寻找一个特殊的正则expression式,它可以识别某个string后的IP地址。

这是IP的正则expression式

(([2]([0-4][0-9]|[5][0-5])|[0-1]?[0-9]?[0-9])[.]){3}(([2]([0-4][0-9]|[5][0-5])|[0-1]?[0-9]?[0-9])) 

IP在我的日志之后

DST = 192.168.1.1

我需要哪个正则expression式,只需在DST =后select一个IP,而不是在SRC =之后

问题是它发现DST = 192.168.1.1,但它应该只能find192.168.1.1

这取决于你使用的工具。 例如与sed这可能会让你想要的。

 echo "... SRC=10.1.1.1 DST=192.168.1.1 LEN=40 ..." | \ sed -e 's/.*DST=\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/g' 192.168.1.1 

看到这篇关于正则expression式分组的文章。

如果你试图突出显示这看起来像你可能需要/需要。 从configuration 。

 # cs_re_s:<color>:<regular expression> # Like cs_re but only the substrings are used(!). Eg: # ^....(...)...(...) # In the example above only what matches between '(' and ')' is # assigned a color. See the 'acctail' colorscheme for an example. 

甚至有一个例子,在那个文件接近我相信你想要的。 这个例子是cs_re_s:cyan:kernel: .*(SRC=[^ ]*) *(DST=[^ ]*)你想要什么,我想要突出显示DST之后的任何东西,可能是cs_re_s:red:kernel: .*DST=([^ ]*)

 DST=(([2]([0-4][0-9]|[5][0-5])|[0-1]?[0-9]?[0-9])[.]){3}(([2]([0-4][0-9]|[5][0-5])|[0-1]?[0-9]?[0-9])) 

这可以用后视expression来完成。

regex_test.txt内容:

 DST=192.168.1.1 SRC=192.168.1.1 

然后从命令行:

  grep -P '(?<=DST=)(([2]([0-4][0-9]|[5][0-5])|[0-1]?[0-9]?[0-9])[.]){3}(([2]([0-4][0-9]|[5][0-5])|[0-1]?[0-9]?[0-9]))' regex_test.txt 

输出:

 DST=192.168.1.1 

编辑

 grep -Po '(?<=DST=)(([2]([0-4][0-9]|[5][0-5])|[0-1]?[0-9]?[0-9])[.]){3}(([2]([0-4][0-9]|[5][0-5])|[0-1]?[0-9]?[0-9]))' regex_test.txt 

输出:

 192.168.1.1