Usando sed
:
sed -E 's/.*\("(.*)"\).*//'
Exemplo:
echo 'javascript:open_window("http://www.example.com/somescript.ext?withquerystring=true")' | sed -E 's/.*\("(.*)"\).*//'
http://www.example.com/somescript.ext?withquerystring=true
Estou tentando usar o grep ou o sed para extrair uma URL de uma string parecida com javascript:open_window("http://www.example.com/somescript.ext?withquerystring=true");
O link javascript é gerado - por um aplicativo externo sobre o qual não tenho mais controle -, portanto, preciso extrair o URL para usá-lo. Eu tentei e não consegui usar uma série de combinações de grep e sed, que não funcionaram.
Simplesmente com o GNU grep
:
s='javascript:open_window("http://www.example.com/somescript.ext?withquerystring=true");'
grep -Eo 'http:[^"]+' <<<"$s"
http://www.example.com/somescript.ext?withquerystring=true
awk 'BEGIN {FS = ""} {print $2}' <<'eof'
javascript:open_window("http://www.example.com/somescript.ext?withquerystring=true");
eof
Você poderia cut
da saída, especificando '"' (aspas duplas) como delimitador.
$ invar='javascript:open_window("http://www.example.com/somescript.ext?withquerystring=true");'
$ echo $invar | cut -d '"' -f2
http://www.example.com/somescript.ext?withquerystring=true
Eu consegui o mesmo usando o comando abaixo do sed
comando
echo 'javascript:open_window("http://www.example.com/somescript.ext?withquerystring=true");'| sed "s/.*(//g" l.txt | sed 's/"//g' | sed "s/).*//g"
saída
http://www.example.com/somescript.ext?withquerystring=true
e='javascript:open_window("http://www.example.com/somescript.ext?withquerystring=true");'
O comando sed ajudará:
sed -E 's/.*(http.*)\);//' <<< "$e"
echo 'javascript:open_window("http://www.example.com/somescript.ext?withquerystring=true");' | sed -E 's/.*"(http.*)"\);//'
Resultado:
http://www.example.com/somescript.ext?withquerystring=true
Tags grep sed shell regular-expression