У меня есть файл, который состоит из URL . Я пытаюсь получить URL из этого файла с помощью сценария оболочки.
В файле URL выглядит так:
('URL', 'http://url.com');
Я пытался использовать следующее:
cat file.php | grep 'URL' | awk '{ print $2 }'
Это дает вывод как:
'http://url.com');
Но мне нужно попасть только url.com
в переменную внутри сценария оболочки. Как я могу сделать это?
cat file.php | grep 'URL' | cut -d "'" -f 4
.http://url.com
не далurl.com
/
sed, обычно следует использовать другой разделитель, напримерsed s@http://@@g
.Вы можете сделать все с помощью простого
grep
:От
man grep
:Хитрость в том, чтобы использовать,
\K
что в регулярном выражении Perl означаетdiscard everything matched to the left of the \K
. Таким образом, регулярное выражение ищет строки, начинающиеся сhttp://
(которые затем отбрасываются из-за\K
), за которыми следует как можно больше не'
символов. В сочетании с-o
этим это означает, что будет напечатан только URL.Вы также можете сделать это в Perl напрямую:
источник
Попробуй это,
источник
echo "define('URL', 'http://url.com');" | awk -F// '{print $2}' | cut -d "'" -f 1
url.com
к другому URL-адресу, как, например, abc.com, он динамический, и мне нужно получить этот URL-адрес с помощью сценария оболочки.Пересматривая это снова и пытаясь использовать ничего, кроме оболочки Bash, еще одно однострочное решение:
Где file.in содержит «грязный» список URL, а file.out будет содержать «чистый» список URL. Внешних зависимостей нет, и нет необходимости создавать новые процессы или подоболочки. Далее следует оригинальное объяснение и более гибкий сценарий. Существует хорошее описание способа здесь , смотри пример 10-10. Это шаблонная подстановка параметров в Bash.
Развивая идею:
Результат:
Не нужно вызывать какие-либо внешние программы. Кроме того, следующий скрипт bash
get_urls.sh
позволяет вам читать файл напрямую или из stdin:источник
[t]csh
, что это хорошо для sh, bash, dash, ksh, zsh ...Если все строки содержат URL:
Если только некоторые строки содержат URL:
В зависимости от других строк вам может понадобиться изменить
^define
регулярное выражениеисточник
awk -F"'|http://" '/^define/ {print $5}' file.php | cut -d ")" -f 1
Просто:
и если вам нужно удалить «http: //», то:
Так:
Если вам нужна определенная часть URL-адреса, для уточнения терминологии, URL-адрес - это все следующее, иногда больше:
источник
для меня остальные
grep
ответы дают строку информации после ссылки.Это сработало для меня, чтобы вытащить только
url
:источник