我想在不使用-P(PERL) 的情况下在 2 个字符串/字符之间进行 GREP 处理,而仅使用-E( --extended-regexp)。
我知道如何使用 awk、sed 和 grep -Po 来做到这一点,这不是这个问题。我问这是否可以grep -E只做。这是和之间的(示例):
例子:
echo "My IP=(192.168.0.1):205 bla bla" | grep -oE '\(\b.*\b\)'
这一个有效,但我得到了(and的结果)。
鉴于在您的示例文本中,parans 之间的文本看起来像一个 ip 地址,并且文本的其余部分不包含看起来像 ip 地址的内容,您可以简单地省略 parans 并查找 IP 地址。
此表达式将匹配看起来像 IP 地址的字符串,并将八位字节限制为从 0 到 255 的数值。
(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])

root@mysystem:~# echo "My IP=(192.168.0.1):205 bla bla" | grep -oE '(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])'
192.168.0.1
root@mysystem:~#