Отфильтруйте IP с помощью регулярных выражений и sed - PullRequest
1 голос
/ 24 февраля 2011

У меня реальная проблема с преобразованием моего регулярного выражения в рабочую команду sed в Centos 5.5.

Я хочу отфильтровать IP-адрес из строки:

"example.org has address 123.45.67.890" -> "123.45.67.890"

Myдо сих пор регулярное выражение:

/([a-zA-Z\. ]+)([0-9\.]+)/

И пример моей команды, использующей sed:

host example.org | grep 'has address' | sed 's/\([a-zA-Z\\. ]+\)\([0-9\\.]+\)/\2/'

Но все, что я получаю от этой команды, это ввод в sed: "пример.org имеет адрес 123.45.67.890 "

Есть идеи?

Ответы [ 6 ]

4 голосов
/ 24 февраля 2011
host example.org | awk '/has address/ {print $4 }'
2 голосов
/ 24 февраля 2011

Вот очень простой способ сделать это без регулярных выражений:

host example.org | grep "has addres" | awk '{print $4}'
1 голос
/ 24 февраля 2011

Вам на самом деле не нужно sed для этого. Вместо этого вы можете использовать cut для анализа пробелов:

host example.org | grep 'has address' | cut -d' ' -f4

Это просто занимает 4-е слово, если оно разделено пробелами.

0 голосов
/ 16 августа 2013

хост exmaple.org |sed -n 's /^.* (. *) $ / \ 1 / p'

0 голосов
/ 24 февраля 2011

Использование GNU grep:

host example.org | grep -Po '.*has address \K[0-9.]*'
0 голосов
/ 24 февраля 2011

Ваш ([a-zA-Z\. ]+) захватывает все до IP-адреса и включает его в совпадение.Это также приведет к сбою сопоставления, если в имени домена есть какие-либо числа.Используйте lookbehind:

/(?<has address )\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/

Вы, очевидно, должны использовать режим Perl для sed для поддержки lookbehinds .Вы также можете использовать группы захвата.Если вам нужен более различающий шаблон (то есть, сопоставлять только то, что очень сильно похоже на IP-адрес), вы можете попробовать это:

/(?<has address )(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\b/

Это должно соответствовать четырем числам от 0 до 255, разделенных точками ипредшествует «имеет адрес».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...