Visto que você precisa combinar o conteúdo sem incluí-lo no resultado (deve corresponder, name="
mas não é parte do resultado desejado), alguma forma de correspondência de largura zero ou captura de grupo é necessária. Isso pode ser feito facilmente com as seguintes ferramentas:
Perl
Com o Perl, você pode usar a n
opção de fazer um loop linha por linha e imprimir o conteúdo de um grupo de captura se corresponder a:
perl -ne 'print "$1\n" if /name="(.*?)"/' filename
GNU grep
Se você tem uma versão melhorada do grep, como GNU grep, você pode ter a -P
opção disponível. Esta opção habilitará o regex semelhante ao Perl, permitindo que você use o \K
que é um lookbehind abreviado. Ele irá redefinir a posição de correspondência, então qualquer coisa antes de ter largura zero.
grep -Po 'name="\K.*?(?=")' filename
A o
opção faz com que o grep imprima apenas o texto correspondente, ao invés de toda a linha.
Vim - Editor de Texto
Outra maneira é usar um editor de texto diretamente. Com o Vim, uma das várias maneiras de fazer isso seria excluir as linhas sem
name=
e, em seguida, extrair o conteúdo das linhas resultantes:
:v/.*name="\v([^"]+).*/d|%s//\1
Grep padrão
Se você não tiver acesso a essas ferramentas, por algum motivo, algo semelhante pode ser alcançado com o grep padrão. No entanto, sem olhar ao redor, será necessária alguma limpeza mais tarde:
grep -o 'name="[^"]*"' filename
Uma nota sobre como salvar os resultados
Em todos os comandos acima os resultados serão enviados para stdout
. É importante lembrar que você sempre pode salvá-los direcionando-os para um arquivo anexando:
> result
ao final do comando.