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-адреса должны быть продолжены, поэтому он может сэкономить дисковое пространство, чтобы немедленно удалить его.

  • Как я могу найти и заменить только в том случае, если совпадение составляет целое слово?
  • Необходимо вставить одинарные кавычки в текстовый файл для использования в качестве SQL-запроса с помощью sed
  • Sed для удаления между разделителями, но сохранить первый разделитель
  • Сценарий Bash - части chomp из строки
  • Возможно ли напечатать повторяющийся диапазон аргументов через cli из csv? (см. пример)
  • Как я могу извлечь числа в файле с помощью sed или любого другого инструмента?
  • sed: захват и замена всех данных между последней обратной косой чертой и запятой
  • инструменты редактирования потока: вывод, что очищается
  • Группировать по и сумме в сценарии оболочки без awk
  • Можно ли изменить файл yml с помощью сценария оболочки?
  • Как удалить определенные ключи из списка слов?
  • Linux и Unix - лучшая ОС в мире.