0

我想在不使用-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的结果)

4

1 回答 1

0

鉴于在您的示例文本中,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:~#
于 2013-08-13T12:38:46.287 回答