Grep соответствие первой строки регулярному выражению - PullRequest
0 голосов
/ 11 июня 2011

Я хочу получить первую строку, которая соответствует моему регулярному выражению. Например, у меня есть строка

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.

1 Ответ

2 голосов
/ 11 июня 2011
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"'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...