我正在寻找一个特殊的正则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