extrai apenas a subseqüência após aspas duplas - grep

5

Eu tenho um arquivo que é como abaixo.

<a href="http://firstlink.com" title="title1">
<a href="http://secondlink.com" title="title2">
<a href="http://thirdlink.com" title="title3">
<a href="http://fourthlink.com" title="title4">

Estou tentando extrair apenas os URLs do arquivo acima. Eu estou usando o comando abaixo.

grep -o '\".*\"' new.txt

No entanto, o comando acima me fornece a saída como

"http://firstlink.com" title="title1">
"http://secondlink.com" title="title2">
"http://thirdlink.com" title="title3">
"http://foruthlink.com" title="title4">

Estou tentando extrair apenas as URLs sem o "" . Então, minha saída esperada é

http://firstlink.com
http://secondlink.com
http://thirdlink.com
http://fourthlink.com

Como devo alterar o comando grep? Ou é possível fazê-lo no comando perl, awk ou sed?

    
por Ramesh 11.02.2014 / 19:36

4 respostas

11

Você pode usar awk .

awk -F\" '{print $2}' filename

produziria o resultado desejado.

Usando sed :

sed 's/[^"]*"\([^"]*\).*//' filename

Usando grep :

grep -oP '[^"]*"\K[^"]*' filename
    
por 11.02.2014 / 19:41
9

regexp, editores de fluxo e intérpretes são exagerados aqui.
Use o bom corte :

cut -d \" -f 2 < filename
    
por 11.02.2014 / 22:50
1
sed 's/.*"\(http.*\)" .*//' filename
    
por 16.02.2014 / 12:23
0

Isto é mais portátil, já que algumas das outras respostas dependem de href ser o primeiro elemento

grep -o href.*\" file.txt | cut -d \" -f 2
    
por 26.11.2014 / 23:43

Tags