Como adicionar texto e linha em branco no início de cada arquivo em um determinado diretório?

0

Como adiciono uma nova linha no início de cada arquivo em / home / johnny contendo o texto "Hello", seguido de uma linha em branco? Além disso, eu tenho que apagar cada espaço ou guia inútil no final de cada linha (se uma linha contiver apenas espaços ou tabulações, eles serão excluídos, mas a linha deve ser mantida).

    
por johnny 12.11.2011 / 21:28

1 resposta

1

Tente o seguinte (iniciado em /home/johnny/ ):

for f in * ; do awk 'BEGIN {print "Hello\n";} {gsub("([ \t]+)$", ""); print $0; }' "$f" >"$f.2"; done

Cria arquivos .2 no mesmo diretório. Esses arquivos contêm as modificações.

A instrução for lista todos os arquivos no diretório. Se você quiser processar apenas arquivos de texto, use *.txt em vez de * .

O awk executa 2 tarefas:

  1. Prepends cada arquivo com "Olá" e a linha em branco.
  2. Remove espaços e caracteres de tabulação no final de cada linha.

Os resultados são exibidos na saída padrão.

Finalmente, um simples redirecionamento cria os arquivos .2 da saída padrão processada.

Funciona em arquivos com espaços em seus nomes, porque $f é citado.

Se você não quiser manter os arquivos originais, modifique o comando da seguinte forma:

for f in * ; do awk 'BEGIN {print "Hello\n";} {gsub("([ \t]+)$", ""); print $0; }' "$f" >"$f.2"; mv "$f.2" "$f"; done

A principal adição é um comando move que substitui os arquivos originais pela versão modificada.

    
por lgarzo 12.11.2011 / 22:08