Eu tenho um arquivo que consiste em uma URL . Estou tentando obter a URL desse arquivo usando um script de shell.
No arquivo, a URL é assim:
('URL', 'http://url.com');
Eu tentei usar o seguinte:
cat file.php | grep 'URL' | awk '{ print $2 }'
Ele fornece a saída como:
'http://url.com');
Mas eu preciso obter apenas url.com
uma variável dentro do script de shell. Como posso fazer isso?
cat file.php | grep 'URL' | cut -d "'" -f 4
.http://url.com
nãourl.com
/
sed, você deve usar um delimitador diferente, por exemplosed s@http://@@g
.Você pode fazer tudo com um simples
grep
:De
man grep
:O truque é usar o
\K
que, no Perl regex, significadiscard everything matched to the left of the \K
. Portanto, a expressão regular procura por seqüências iniciadas porhttp://
(que são descartadas por causa de\K
) seguidas pelo maior número'
possível de caracteres não . Combinado com-o
, isso significa que apenas o URL será impresso.Você também pode fazer isso diretamente no Perl:
fonte
Tente isso,
fonte
echo "define('URL', 'http://url.com');" | awk -F// '{print $2}' | cut -d "'" -f 1
url.com
URL para um URL diferente, bem como o abc.com, é dinâmico e eu preciso pegar esse URL usando o shell script.Revisitando isso novamente e tentando usar nada além de um shell Bash, outra solução de uma linha é:
Onde file.in contém a lista de URLs 'sujos' e file.out conterá a lista de URLs 'limpos'. Não há dependências externas e não há necessidade de gerar novos processos ou subshells. A explicação original e um script mais flexível seguem. Há um bom resumo do método aqui , veja o exemplo 10-10. Isso é substituição de parâmetro baseada em padrão no Bash.
Expandindo a ideia:
Resultado:
Não há necessidade de chamar nenhum programa externo. Além disso, o seguinte script bash
get_urls.sh
, permite ler um arquivo diretamente ou a partir do stdin:fonte
[t]csh
, por isso é bom para sh, bash, traço, ksh, zsh ...Se todas as linhas contiverem um URL:
Se apenas algumas linhas contiverem um URL:
Dependendo das outras linhas, pode ser necessário alterar a
^define
regexfonte
awk -F"'|http://" '/^define/ {print $5}' file.php | cut -d ")" -f 1
Simples:
e se você precisar remover o 'http: //', então:
Assim:
Se você precisa de um certo parte da URL que você precisa para refinar a sua terminologia, a URL é tudo do seguinte, às vezes mais:
fonte
para mim, as outras
grep
respostas fornecidas retornam informações da sequência após o link.Isso funcionou para mim retirar apenas o
url
:fonte