在OpenBSD到Linux中,Grep的行为是不一样的。 无法获得命令的工作

所以基本上这个命令所做的就是安全地连接到一个Web域来获取我的外部IP地址,这在Linux Debian系统上是完美无瑕的,但是在我的OpenBSD系统上却不能正常工作。 Curl命令可以正常工作,但是Grep命令有些问题,因为它只是没有抓住curl的IP。

是否 – 不适用于OpenBSD? 我不能告诉手册页..

非常感谢

USERAGENT="Mozilla/4.0" WEB_LOCATION="https://duckduckgo.com/?q=whats+my+ip" curl -s --retry 3 --max-time 5 -tlsv1.2 --user-agent $USERAGENT $WEB_LOCATION | grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>' 

*******已解决(有点)********

我出于某种原因解决了这个问题:

 grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>' 

没有在OpenBSD上工作,但这个长版本..

 grep -Eo '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}' 

为什么这种情况是非常混乱的,因为第一种search模式在我使用的所有Debian Linux版本上都能正常工作!

问题在于你的regexp中的边界模式,在OpenBSD中是[[:<:]][[:>:]] ,而在Debian(也可能是其他Linux发行版)中分别是\<\>

 grep -Eo '[[:<:]][[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}[[:>:]]' 

应该管用。

详细信息请阅读手册页 。