Bash - Extrai todos os urls, exceto os específicos

0

Eu tenho um arquivo com várias linhas de URLs. Há URLs que não estou interessado em processar ou visualizar e que eles sejam ignorados. Eu só quero mais alguma coisa além deles para mostrar como uma saída.

Aqui está o comando que tenho até agora:

grep 'http://' data.txt | sed 's/.*\(http:.*\)\".*//'

Desejo excluir URLs, incluindo o seguinte:

http://schemas.openxmlformats.org...

Sou muito novo nisso e agradeço sua ajuda com sinceridade.

Atualização: aqui está o arquivo que estou processando:

Relationships Xmlns             : http://schemas.openxmlformats.org/package/2006/relationships
Relationships Relationship Type : http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties
Style Sheet Xmlns               : http://schemas.openxmlformats.org/spreadsheetml/2006/main
Relationships Xmlns             : http://schemas.openxmlformats.org/package/2006/relationships
Relationships Relationship Type : http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings
Workbook Xmlns                  : http://schemas.openxmlformats.org/spreadsheetml/2006/main
Relationships Xmlns             : http://schemas.openxmlformats.org/package/2006/relationships
Relationships Relationship Type : http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink
Relationships Relationship Target: http://www.yahoo.com/
Worksheet Xmlns                 : http://schemas.openxmlformats.org/spreadsheetml/2006/main
Sst Xmlns                       : http://schemas.openxmlformats.org/spreadsheetml/2006/main
Types Xmlns                     : http://schemas.openxmlformats.org/package/2006/content-types
Properties Xmlns                : http://schemas.openxmlformats.org/officeDocument/2006/extended-properties

Eu quero que o link seja extraído sozinho e o restante seja ignorado porque eles contêm schemas.openxmlformats

    
por ksa_coder 08.03.2018 / 03:16

2 respostas

1

Acho que isso pode ser feito apenas com sed:

sed -n '\,http://schemas.openxmlformats.org,!s/.*\(http:.*\).*//p'
  • -n desativa a impressão automática de texto, portanto, apenas as linhas selecionadas podem ser impressas.
  • \,http://schemas.openxmlformats.org,! executa o seguinte comando apenas nas linhas que não correspondem (portanto ! no final) http://schemas.openxmlformats.org . Eu usei , em vez de / como o delimitador regex aqui, portanto, o \, no início. Isso reduz a necessidade de escapar de \ no padrão.
  • O comando s é o mesmo que o seu, mas eu uso um p para imprimir a linha, que agora contém apenas o URL.

Estou assumindo apenas um URL por linha.

Remover a cotação extra me fornece a saída corretamente:

$ sed -n '\,http://schemas.openxmlformats.org,!s/.*\(http:.*\).*//p' inpu-file
http://www.yahoo.com/
    
por 08.03.2018 / 03:30
1

A opção grep with -v permite selecionar linhas não correspondentes. por exemplo, dando um arquivo file.txt com este conteúdo:

first line
second line
third line
fourth text 

Usando este comando:

grep "line" file.txt | grep -v "second"

O resultado será:

first line
third line

Se você quiser excluir várias palavras ao mesmo tempo, pode usar um regex assim:

grep "line" file.txt | grep -vE "(second|first)"

O resultado será:

    third line

Após a atualização da pergunta:

Para este caso, você pode usar um destes métodos:

  1. grep 'http://www.yahoo' data.txt | sed 's/.*\(http:.*\)//'
  2. grep 'http://' data.txt | sed 's/.*\(http:.*\)//' | grep yahoo

A primeira maneira lhe dará apenas www.yahoo .

O segundo lhe dará todo o URL que contém yahoo como uma palavra nele.

Para extrair todos os URLs, mas alguns:

grep 'http://' data.txt | sed 's/.*\(http:.*\)//' | grep -vE "(openxmlformats|<Another URL to exclude>)"
    
por 08.03.2018 / 03:37