LINUX.ORG.RU

Как выделить подстроку в SED (получить то, что входит в паттерн)

 , ,


0

1

Есть файл следующего содержания:

"195.154.8.111:80 orport=443 id=FCB66"
"192.187.124.98:9030 orport=9001 id=FD187"
"193.11.164.243:9030 orport=9001 id=FFA72"


Нужно выбрать из него IP-адреса. Третий час сижу, не могу понять, как в sed (или в grep?) получить только то, что попадает под паттерн.

Каг?

★★★★★

Или если именно sed, '/(pattern)/s//\1/'

anonymous
()
$ sed -r 's/"(.+):.+/\1/' ./raw
195.154.8.111
192.187.124.98
193.11.164.243
$
anonymous
()

Для grep есть опция -o.

Но сама выборка ipv4 адресов может оказаться не такой уж тривиальной задачей.

$ grep -Eo "(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]?)" ip.log
Deleted
()
Ответ на: комментарий от Deleted

Да, и стоит обложиться \b, чтобы не было false-match для случая 412.255.255.1

Deleted
()

Третий час сижу
★★★★★

И ведь если бы такое в первый раз на лоре.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.