Приспичило получить все урлы из файла и нашел простую команду.
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, которую мы уже знаем. И так далее по цепочке.
На этом все! Успехов!