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

问题描述

| 我想获取与我的正则表达式匹配的第一个字符串。 例如我有字符串   RCPT from unkNown [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 \。     

解决方法

        
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\"\'