Você pode conseguir isso facilmente com uma combinação de grep
para encontrar todas as linhas em file.txt
contendo o texto "Leilões iniciados para" e sed
para extrair apenas os nomes de domínio sem o TLD e imprimir um por linha :
grep -Po '(?<="Auctions were started for ).*(?=")' file.txt | sed -r 's/and |,|.com//g;y/ /\n/'
Aqui está um detalhamento do comando:
grep -Po '(?<="Auctions were started for ).*(?=")' file.txt
Isso verifica file.txt
linha por linha e corresponde a qualquer coisa ( .*
) precedida pela string "Auctions were started for
e seguida por outra "
. Precisamos da opção grep
-P
para ativar expressões regulares de PCRE (caso contrário, não poderíamos usar as expressões de (?<=...)
e (?=...)
regex) e sua opção -o
para imprimir apenas a parte correspondente de uma linha (excluindo as lookarounds) em vez de toda a linha.
Em uma segunda etapa, canalizamos a saída desse primeiro comando para esse comando sed
:
sed -r 's/and |,|.com//g;y/ /\n/'
Esta linha sed
contém dois comandos, s/and |,|.com//g
e y/ /\n/
.
Primeiro, s/PATTERN/REPLACEMENT/
pesquisa a expressão regular (regex estendido, na verdade, por causa da opção -r
) padrão and |,|.com
, o que significa and
, ,
ou .com
. Em seguida, substitui isso por nada, então esses padrões são removidos da linha de entrada. O g
no final permite a pesquisa e a substituição globais, em vez de apenas processar a primeira correspondência em todas as linhas.
Segundo, y/CHARACTERS/REPLACEMENTS/
traduz todos os caracteres do primeiro campo para os caracteres correspondentes no segundo campo. Aqui estou usando isso para simplesmente converter todos os espaços restantes em quebras de linha.