Curl url txt file, но grep каждый URL отдельно от одного файла

Хорошо, вот один из вас, ребята, который меня озадачивает. Поэтому у меня есть текстовый файл с большим количеством URL-адресов. Я использую curl -K "$urls" > $output

вывести вывод в выходной файл. Теперь для вывода каждого отдельного URL есть термин, скажем, «залог», под которым я не хочу больше информации. Теперь я знаю, что могу использовать

 sed '/mortgage/q' 

удалить всю информацию под термином «ипотека», но если я использую ее в своем сценарии так,

 curl -K "$urls" | sed '/mortgage/q' > $output 

он удаляет все из всего выпуска под первым экземпляром «ипотеки» из вывода первого URL-адреса в URL-адресах, но это вытирает всю информацию из другого URL-адреса (включая материал перед их собственным экземпляром слова «закладка» ») из-за того, что он работает над всей продукцией, а не для каждого URL-адреса.

Как я могу указать sed '/mortgage/q' чтобы действовать отдельно на выходе каждого URL-адреса в файле url, чтобы он не влиял на результат глобально. Любая помощь оценивается.

мой url-файл довольно прост, в формате (это всего лишь пример):

 URL = http://www.bbc.co.uk/sport/rugby-union/34914911 URL = http://stackoverflow.com/questions/9084453/simple-script-to-check-if-a-webpage-has-been-updated 

и так далее…..

******* НОВЫЙ РЕДАКТ: Я задумал гипотетический способ достижения этого, но не уверен в коде – есть ли способ адаптировать curl -K "$urls" | sed '/mortgage/q' > $output curl -K "$urls" | sed '/mortgage/q' > $output чтобы команда возвращалась после каждого последующего url в файле $url Таким образом, команда curl изначально просто извлекает первый url в файле, выполняет команду sed на этом url-материале , добавляет к $output , затем возвращается ко второму URL-адресу в файле, выполняет команду sed, добавляет к $output и т. д …. Это будет означать, что требуемый материал из каждого URL-адреса был включен в выходной файл, но материал ниже «залога» в каждом URL-адресе не был. Я просто не знаю, как добиться этого с помощью кода. Есть идеи?

2 Solutions collect form web for “Curl url txt file, но grep каждый URL отдельно от одного файла”

Это должно быть сделано в двух строках:

 sed -n 's/\s*URL\s*=\s*\(.*\)/\1/p' /tmp/curl.conf|xargs -I {} curl -O "{}" sed -n 's/\s*URL\s*=\s*\(.*\)/\1/p' /tmp/curl.conf|xargs -I {} basename "{}"|xargs -I {} sed '/mortgage/q' "{}" 

Первая команда sed в каждой строке извлекает URL-адреса из вашего файла urls (/tmp/curl.conf в примере). В первой строке мы используем параметр -O curl для сохранения вывода с каждой страницы в файл с именем страницы. Во второй строке мы пересматриваем каждый из этих файлов и показываем только текст, который вас интересует. Конечно, если слово «залог» не встречается в файле, тогда будет выводиться весь файл.

Это оставит вам временный файл для каждого URL-адреса в текущем каталоге.

РЕДАКТИРОВАТЬ:

вот короткий скрипт, который позволяет избежать любых файлов с более старыми файлами, выводит результат на стандартный вывод, вы можете перенаправить его оттуда, как хотите:

 #!/bin/bash TMPF=$(mktemp) # sed command extracts URLs line by line sed -n 's/\s*URL\s*=\s*\(.*\)/\1/p' /tmp/curl.conf >$TMPF while read URL; do # retrieve each web page and delete any text after 'mortgage' (substitute whatever test you like) curl "$URL" 2>/dev/null | sed '/mortgage/q' done <"$TMPF" rm "$TMPF" 

Этот общий трюк работает, даже если ваш файл конфигурации curl содержит разные параметры, такие как пользовательский агент, референт и т. Д.

Сначала сделайте свой конфигурационный файл с именем curl_config , затем используйте awk '/^[Uu][Rr][Ll]/{print;print "output = dummy/"++k;next}1' curl_config > curl_config2 чтобы создать новый файл конфигурации curl, который постепенно добавляет разные имена выходных файлов под каждым URL / URL:

Пример:

 [xiaobai@xiaobai curl]$ cat curl_config URL = "www.google.com" user-agent = "holeagent/5.0" url = "m12345.google.com" user-agent = "holeagent/5.0" URL = "googlevideo.com" user-agent = "holeagent/5.0" [xiaobai@xiaobai curl]$ awk '/^[Uu][Rr][Ll]/{print;print "output = dummy/"++k;next}1' curl_config > curl_config2 [xiaobai@xiaobai curl]$ cat curl_config2 URL = "www.google.com" output = dummy/1 user-agent = "holeagent/5.0" url = "m12345.google.com" output = dummy/2 user-agent = "holeagent/5.0" URL = "googlevideo.com" output = dummy/3 user-agent = "holeagent/5.0" [xiaobai@xiaobai curl]$ 

Затем mkdir dummy создает каталог для хранения этих временных файлов. Создайте сеанс inotifywait (замените sed / google / q на ваш sed / mortgage / q '):

 [xiaobai@xiaobai curl]$ rm -r dummy; mkdir dummy; [xiaobai@xiaobai curl]$ rm final [xiaobai@xiaobai curl]$ inotifywait -m dummy -e close_write | while read path action file; do echo "[$file]">> final ; sed '/google/q' "$path$file" >> final; echo "$path$file"; rm "$path$file"; done; Setting up watches. Watches established. 

Откройте еще один сеанс bash / terminal, rm final file if exist, затем запустите завиток с вашим файлом curl_config2, созданным на первом шаге выше:

 [xiaobai@xiaobai curl]$ curl -vLK curl_config2 ...processing 

Теперь взгляните на сеанс inotifywait, он распечатает последний закрытый файл, скопируйте его и сразу же удалите его:

 [xiaobai@xiaobai curl]$ inotifywait -m dummy -e close_write | while read path action file; do echo "[$file]">> final ; sed '/google/q' "$path$file" >> final; echo "$path$file"; rm "$path$file"; done; Setting up watches. Watches established. dummy/1 dummy/3 

Наконец, вы можете наблюдать, что ваш результат называется final , разделитель [1 и 3] генерируется из echo "[$file]">> final выше:

введите описание изображения здесь

Причина сразу удалить файл, потому что я предполагаю, что ваш выходной файл большой, и многие URL-адреса должны быть продолжены, поэтому он может сэкономить дисковое пространство, чтобы немедленно удалить его.

  • Создать в HTML из вывода скрипта bash
  • sed + удалить слово из определенной строки
  • инструменты редактирования потока: вывод, что очищается
  • Изменить имена файлов в Makefile
  • Почему эта команда xargs не работает?
  • Помощь с повторением поля A в CSV-файле, где поле B имеет указанное значение
  • Извлечение частей текста с помощью sed, awk
  • Как получить путь, индекс строки и содержимое строки в оболочке bash?
  • Разделение строки до определенного места
  • Извлечь два значения из вывода команды
  • замените '_' на ',' в файле, который содержит список имен файлов
  • Мне нужно удалить. в моих данных
  • Interesting Posts

    Текстовый редактор, который позволяет раскрасить произвольный текст (и экспортировать его)?

    Firefox, работающий на скопированной копии Antergos, не работает

    Извлечь количество отказов из отчета об испытаниях

    Ошибка аутентификации с помощью postfix и sasl с использованием sasldb

    Как получить текст при запуске терминала

    Как ограничить доступ к Интернету для определенного пользователя на LAN с помощью iptables в Linux

    Как я могу попросить NetworkManager / ModemManager запустить программу до pppd?

    Unix: Bash Ограничение выхода на X Количество строк

    Рекурсивно заменить строку в файлах

    Как я могу сбросить автоматическую нумерацию имен сеанса tmux?

    Аккумулятор не обнаружен на моем встроенном устройстве при перезагрузке

    Виртуальная клавиатура

    Запустить приложение GTK3 без настраиваемых настроек gtk?

    setuid (и другие) разрешения, потерянные при копировании / в других местах – что делать?

    Как ускорить работу с разреженными файлами с помощью tar, gzip, rsync?

    Linux и Unix - лучшая ОС в мире.