DST= 之后但 SRC= 之后不适用的 IP 正则表达式

DST= 之后但 SRC= 之后不适用的 IP 正则表达式

我正在寻找一个特殊的正则表达式,它可以识别特定字符串后的 IP 地址。

这是 IP 的正则表达式

(([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 在我的日志中跟踪

夏令时=192.168.1.1

我需要哪个正则表达式在 DST= 之后选择一个 IP,而不是在 SRC= 之后选择一个 IP

答案1

问题是它找到 DST=192.168.1.1 但它应该只找到 192.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

请参阅此文章正则表达式分组

如果你正在尝试突出显示,这看起来可能是你想要/需要的。从配置

# cs_re_s:<color>:<regular expression>
#             Like cs_re but only the substrings are used(!). E.g.:
#             ^....(...)...(...)
#             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=([^ ]*)

答案2

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]))

答案3

可以用后视表达式来完成。

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

相关内容