1

Все, я хочу извлечь все URL-адреса, упомянутые в выражениях кода во всех js-файлах в папке. Например, если файл js содержит этот фрагмент кода:

var myURL="http://yahoo.com/signup"  
//var myURL="http://yahoo.com/sign" --commented out 

затем, когда мой скрипт запущен, вывод должен быть просто " http://yahoo.com/signup ". В настоящее время я использую grep для извлечения URL-адресов. Вывод содержит оба оператора в выводе. Я не хочу закомментированный URL в выводе.

В настоящее время я использую базовый оператор grep

 cat somefile.js | grep "http[s]\?://"  

Все URL-адреса будут http/https и будут объявлены в выражениях в js-файлах.

Я хотел бы точно настроить этот оператор grep для вывода только URL-адресов (исключая прокомментированные URL-адреса), а не полный оператор. Как я могу точно настроить это выражение grep?

2 ответа2

0

Какого размера ваш файл / сколько у вас есть?

Очень простое решение, которое я использую для такого рода вещей, - Excel. Вы можете просто скопировать / вставить файл (если есть только пара) в Excel, а затем отсортировать столбец. Вы должны найти все свои переменные в одном месте. Скопируйте / вставьте их в новый лист и разбейте столбец на «». Это должно дать вам колонку ваших URL.

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

ПРИМЕР

Я считаю, что это особенно полезно для анализа JSON вручную. Вот пример того, как я обычно использую это. Вот фрагмент из массива json:

{'english' => 'the animals, 'spanish' => 'los animales', 'image_url' => 'http://www.resourcesgraphics.com/images/Animals-Set-icons.jpg},
{'english' => 'the bear, 'spanish' => ' el oso  , 'image_url' => 'http://images.nationalgeographic.com/wpf/media-live/photos/000/005/cache/grizzly-bear_566_600x450.jpg},
{'english' => 'the beaver, 'spanish' => 'el castor, 'image_url' => 'http://images.nationalgeographic.com/wpf/media-live/photos/000/004/cache/beaver_457_600x450.jpg},
etc... (I have ~2000 entries in this file.)

Чтобы получить все URL, я просто копирую / вставляю весь файл в Excel и использую Данные> Текст в столбцы> С разделителями. Если вы разделите цитату, она вытащит URL в свой собственный столбец.

Это также идет другим путем. (Я делаю это гораздо чаще.) Если вы хотите составить таблицу выше, вы можете использовать этот процесс в обратном порядке. Чтобы быстро заполнить столбцы, я просто создаю первый столбец следующим образом:

{'*english*' => '*the animals*, '*spanish*' => '*los animales*', '*image_url*' => '*http://www.resourcesgraphics.com/images/Animals-Set-icons.jpg*},

(* = разделение на столбцы)

Итак, теперь у нас есть column1 = "{'", column2 = "english", column3 = "' => '" и т.д. Столбцы 1, 3, 5 и т.д. Являются заполнителями, а данные идут посередине. Затем я заполнил бы все данные и скопировал заполнители. Быстрый способ заполнить данные заполнителя заключается в двойном щелчке правой нижней ручки верхней ячейки заполнителя. Это должно дублировать данные вниз по столбцу до конца ваших данных.

После того как вы создали свою таблицу, сохраните ее. Вы можете использовать его снова позже. Когда вам нужны ваши данные, просто скопируйте все и вставьте в текстовый редактор.

Обычно от колонок остается куча надоедливых вкладок, но их можно удалить с помощью простого поиска / замены.

Надеюсь, это поможет - дайте мне знать, если вам нужна дополнительная информация! - L

0

Вот решение PERL:

perl -ne '/^[^\/\/]*"(http.+?)"/ && do{print "$1\n"}' somefile.js 

ОБЪЯСНЕНИЕ:

  • perl -ne : цикл по входному файлу построчно (-n) и запуск сценария, указанного в командной строке (-e)

  • /^[^\/\/]*"(http.+?)"/ : Найдите строки, которые не имеют // перед первым http и сохраните символы после http до первого " . Шаблон в скобках () будет сохранен как $1 .

  • && do{print "$1\n"} : если строки соответствуют регулярному выражению, распечатайте захваченный шаблон (URL).

ПРЕДОСТЕРЕЖЕНИЯ:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .