Usando o grep para exportar linhas específicas para novos arquivos de forma reiterativa

0

Eu tenho uma pasta com muitos arquivos. Eu quero entrar em cada arquivo e exportar linhas com mais de 80 caracteres.

Estou usando

grep '.\{80\}' filename > newfilename

Mas eu quero fazer isso para todos os arquivos no diretório de uma só vez. Como posso fazer isso para que eu tenha o mesmo número de arquivos?

    
por mah 30.05.2018 / 18:45

1 resposta

1

De acordo com esta resposta sed pode filtrar linhas pelo tamanho:

sed -e '/.\{120\}/!d'

[…] matches lines that don't have (at least) 120 characters (the ! after the expression is to execute the command on lines that don't match the pattern before it), and deletes them (ie. doesn't print them).

sed -i funciona no lugar. Isso leva a uma abordagem a seguir:

cp -a original_dir/ modified_dir/
find modified_dir/ -type f -exec sed -i -e '/.\{80\}/!d' {} +

Agora, todos os arquivos de original_dir/ têm sua versão modificada em modified_dir/ .

Como alternativa, você pode trabalhar totalmente dentro do original_dir/ , informando sed para salvar arquivos antigos com um sufixo:

find original_dir/ -type f -exec sed -i.old -e '/.\{80\}/!d' {} +

Nesse caso, se você usar -i em vez de -i.old , os arquivos antigos serão perdidos.

    
por 30.05.2018 / 19:17

Tags