Como você extrai uma palavra inteira contendo substring?

6

Se eu tiver um arquivo assim:

example.png example.jpg example2.jpg example2.png example.swf
example2.swf example3.jpg example4.jpg example3.png example3.swf 

e eu quero extrair as palavras contendo swf por exemplo, a saída seria algo como isto

example.swf 
example2.swf
example3.swf

Eu tentei grep -o "swf[^[:space:]]*" , que imprime apenas um monte de swf , e então eu tentei grep -o '[^ ]*a\.swf[^ ]*' , que produziu muito poucas linhas contendo "swf". Alguém sabe o que fazer?

    
por DisplayName 07.02.2016 / 01:31

3 respostas

8

Com o GNU grep:

grep -o '\b\w*\.swf\b' file

Saída:

example.swf
example2.swf
example3.swf

\b: a zero-width word boundary

\w: word character

\.: match one dot

Veja: Perguntas frequentes sobre expressões regulares de estouro de pilha

    
por 07.02.2016 / 07:14
5

Você pode fazer:

grep -o '[^ ]*\.swf' file.txt
  • [^ ]* corresponde a zero ou mais caracteres não espaciais

  • \.swf corresponde ao literal .swf

Exemplo:

% grep -o '[^ ]*\.swf' file.txt
example.swf
example2.swf
example3.swf
    
por 07.02.2016 / 07:20
4

Primeiro passo

Substitua espaços por extremidades de linha usando sed

Segundo passo

Filtre a saída usando grep

Exemplo

sed -e s/\ /\n/g file | grep .swf

    
por 07.02.2016 / 01:33