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.