我正在寻找一个特殊的正则表达式,它可以识别特定字符串后的 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