Extrai URL de um padrão específico (Alerta do Google)

1

Eu tentei todas as combinações possíveis (para meu conhecimento pobre) de comandos grep e sed, mas não consegui extrair URLs com o seguinte padrão (e-mails do Alerta do Google em texto simples):

"url": "https://www.google.com/url?rct=3Dj\u0026sa=3Dt\u0026url=3Dhtt=
p://abcnews.go.com/US/wireStory/judge-orders-forfeiture-cartel-money-launde=
ring-case-44765120\u0026ct=3Dga\u0026cd=3DCAEYACoTNzAxNDE5ODc4MzMzMTc5OTA4O=
TIaYjdkMGIxMjNmMjc0YWM4ODpjb206ZW46VVM\u0026usg=3DAFQjCNHKeTb3brU2sr0qOpXXJ=
fuW9Nfntg"

Obviamente, o que eu quero extrair é:

http://abcnews.go.com/US/wireStory/judge-orders-forfeiture-cartel-money-laundering-case-44765120

Portanto, preciso extrair o que está entre "url = 3D" e "\".

Eu tentei todos os tipos de variações de grep e sed, mas nada funciona.

Eu ficaria muito grato se alguém pudesse me ajudar a descobrir isso.

PS: Eu sei que depois que as URLs forem extraídas, terei que lidar com os caracteres =, mas um problema por vez:)

    
por serge 07.02.2017 / 21:51

4 respostas

1

Você pode usar uma linha de comando como a seguinte para o processamento:

cat INBOX | sed -z -e 's/=\n//g' | \
   sed -e 's/.*u0026url=3D//;t a;d;:a' -e 's/\u0026ct=3D.*//'

A primeira etapa sed é para unir as linhas as extremidades com "=" com a linha seguinte, e assim, em particular, criar linhas únicas das linhas interessantes.

A segunda etapa sed primeiramente reduz as linhas interessantes removendo sua parte da cabeça e descarta quaisquer linhas sem essa cabeça e, em segundo lugar, remove as partes da cauda das linhas de destino.

    
por 08.02.2017 / 21:43
0

você pode tentar com este comando

awk -F"3D" '{print $4}' input.txt | sed "s/\\u.*//"
    
por 08.02.2017 / 04:29
0

Não tenho certeza de como você está recebendo os alertas, mas fornecerei um exemplo de como fazer isso se os alertas estiverem em um arquivo de texto simples. Eu lidaria com o "=" primeiro usando o tr, então eu usaria o lookaround do Pearl com o grep da seguinte forma ...

cat input.txt | tr --delete '=\n'| grep -oP '(?<=url3D).*?(?=\u0026)' input.txt

A saída usando sua amostra é

http://abcnews.go.com/US/wireStory/judge-orders-forfeiture-cartel-money-laundering-case-44765120
    
por 08.02.2017 / 09:26
0

Questão resolvida usando a sugestão de Ralph Rönnquist

cat INBOX | sed -z -e 's/=\r\?\n//g' | \ sed -e 's/.*u0026url=3D//;t a;d;:a' -e 's/\u0026ct=3D.*//' > output.txt

Demora muito tempo para computar, mas extrai as URLs corretamente.

Muito obrigado a todos pela ajuda!

    
por 08.02.2017 / 23:56

Tags