КатегорииLinuxАдминистрирование

Как с помощью командной строки Linux получить все URL из файла

Приспичило получить все урлы из файла и нашел простую команду.

cat filename | grep http | grep -shoP 'http.*?[" >]' > outfilename

где filename — файл из которого извлекаем, outfilename — файл в который записываем.

Разберем по подробнее, как это работает.

cat filename

Данная команда считывает данные файла и выводит на экран терминала. Либо передает данные дальше по цепочки, как в нашем случае. Все из за символа |.

Оператор | — является особым вариантом перенаправления вывода, по сути является способом организации канала передачи данных. Иногда его называют трубопроводом или конвейером. То есть, если взять несколько команд и соединить их данным оператором, результат первой команды передастся второй и так далее.

grep http

grep — находит целые строки, в которых содержится переданное значение, в нашем случае это http. Данная команда нужна, чтобы учитывать только нужные строки, где есть хотя бы упоминание http и не гонять процессор попусту.

grep -shoP 'http.*?[" >]'

Тут мы получив все строки с http, вытаскиваем все урл с помощью регулярного выражения и некоторых параметров grep меняющих его поведение.

s — не показывать сообщения об ошибках

h — не начинать вывод с имени файла

o — показывать только часть строки, совпадающей с ШАБЛОНОМ

P — ШАБЛОН — регулярное выражения языка Perl

> outfilename

Оператор > используется для перенаправления вывода команды в файл. В данном случае в файл outfilename.

Бонус! Извлекаем урлы сразу из нескольких файлов, включая вложенные файлы.

find * -exec cat {} \; | grep http | grep -shoP 'http.*?[" >]' > outfilename
find * -exec cat {} \;

Данная команда выполняет поиск в текущей папке, а так же во всех вложенных. Затем передает полный путь до найденного файла команде cat, которую мы уже знаем. И так далее по цепочке.

На этом все! Успехов!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *