Como encontrar texto em arquivos e apenas manter as respectivas linhas correspondentes usando o terminal no OS X?

3

Sou bem novo no terminal e nas linhas de comando, pelo que descobri, o grep parece ser a ferramenta certa para arquivos de pesquisa para cadeias de texto específicas.

Eu tenho uma pasta com muitos arquivos de texto enormes e gostaria de manter apenas as linhas de cada arquivo que contém uma determinada string (por exemplo, "/ foobar"., por exemplo:

file1 (no file ending)

 1. lorem ipsum
 2. trololo /foobar abc
 3. dolor sit
 4. foobar def

será depois:

 1. trololo /foobar abc
 2. foobar def

Eu acho que o comando é algo como isto

grep -wE "(/foobar)" 

mas não tenho idéia de como dizer ao comando para manter apenas essas linhas e fazer isso para cada arquivo que você encontrar na pasta atual.

Você faria isso com find ou o grep teria uma funcionalidade própria para isso? Algo como:

find ./* -exec do grep stuff here
    
por Alex 15.05.2014 / 15:56

1 resposta

3

grep só encontraria linhas que correspondessem a um padrão em um arquivo, isso não alteraria o arquivo. Você pode usar sed para encontrar o padrão e fazer alterações no arquivo:

sed '/\B\/foobar\b/!d' filename

exibiria linhas correspondentes a /foobar no arquivo. Para salvar as alterações no arquivo no local, use a opção -i .

sed -i '/\B\/foobar\b/!d' filename

Você pode usá-lo com find também:

find . -type f -exec sed -i'' '/\B\/foobar\b/!d' {} \;
    
por 15.05.2014 / 16:45

Tags