4

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

-Eo 不能与 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}'

为什么会出现这种情况非常令人困惑,因为第一个搜索模式在我使用过的所有 Debian Linux 版本上都可以正常工作!

4

1 回答 1

7

问题在于您的正则表达式中的单词边界模式,它们在 OpenBSD 中,但[[:<:]]分别在Debian(以及可能的其他 Linux 发行版)中。[[:>:]]\<\>

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

应该管用。

阅读手册页了解详细信息。

于 2015-02-20T23:23:38.273 回答