Grep 匹配正则表达式的第一个字符串

发布于 2024-11-15 03:05:03 字数 536 浏览 3 评论 0原文

我想获取与我的正则表达式匹配的第一个字符串。 例如我有字符串

来自未知的 RCPT[211.147.3.74]:450 4.7.1 客户端主机被拒绝:找不到您的主机名,[211.147.3.74];

我的脚本如下所示:

IP=`echo $LINE | grep -E -o --max-count=1 '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'`

echo $IP

结果我得到

211.147.3.74 211.147.3.74

但我只想获取一次 IP。我尝试了 'grep --max-count=1' 但仍然有两个 ip。

I want to get the first string that matches my regular expression.
For example I have the String

RCPT from unknown[211.147.3.74]: 450 4.7.1 Client host rejected: cannot find your hostname, [211.147.3.74];

and my script looks like this:

IP=`echo $LINE | grep -E -o --max-count=1 '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'`

echo $IP

As result I get

211.147.3.74 211.147.3.74

But I would like to get the IP only once. I tried 'grep --max-count=1' but there are still two ip's.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

栖竹 2024-11-22 03:05:03
LINE='RCPT from unknown[211.147.3.74]: 450 4.7.1 Client host rejected: cannot find your hostname, [211.147.3.74];'
ipn='(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'
IP=`echo $LINE | grep -E -o "$ipn\.$ipn\.$ipn\.$ipn" | head -1`
echo "$IP"

从此处

echo "$LINE"  | perl -MRegexp::Common=net -ne '/($RE{net}{IPv4})/ and print "$1\n"'
LINE='RCPT from unknown[211.147.3.74]: 450 4.7.1 Client host rejected: cannot find your hostname, [211.147.3.74];'
ipn='(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'
IP=`echo $LINE | grep -E -o "$ipn\.$ipn\.$ipn\.$ipn" | head -1`
echo "$IP"

or from here

echo "$LINE"  | perl -MRegexp::Common=net -ne '/($RE{net}{IPv4})/ and print "$1\n"'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文