MyTetra Share
Делитесь знаниями!
Как выделить подстроку в Sed или Grep (получить только то, что входит в паттерн)
Время создания: 16.09.2016 12:19
Текстовые метки: linux, bash, sed, grep, подстрока, выделить
Раздел: Компьютер - Программирование - Регулярные выражения
Запись: xintrea/mytetra_syncro/master/base/1474017566pzh30lte1o/text.html на raw.github.com

Вопрос:


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

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?) получить только то, что попадает под паттерн.



Ответ:


Проще всего сделать через grep, воспользовавший опцией -o. Например:


grep -E -o "([0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)"


или с традиционными выражениями PCRE:


grep -P -o "\d+\.\d+\.\d+\.\d+"


Можно через sed следующим способом:


$ sed -r 's/(.+):.+/\1/' ./list.txt

195.154.8.111

192.187.124.98

193.11.164.243


Sed вначале найдет IP-адрес в строке по шаблону (.+):.+ , а потом заменит всю строку на найденное значение с помощью ссылки назад \1. В данной команде list.txt - это файл с исходными строками.



Так же в этом разделе:
 
MyTetra Share v.0.55
Яндекс индекс цитирования