Anexar linhas ao início de todos os arquivos em um diretório

0

Estou tentando adicionar duas linhas ao início de todos os arquivos em um diretório.

Eu posso fazer isso para um arquivo individual usando o seguinte comando:

echo -e "% First Line\n% "$(date)"\n\n$(cat file1.txt)">file1.txt

Como posso adicionar duas linhas ao início de todos os arquivos em um diretório?

    
por Sushma Sharma 03.05.2017 / 05:45

3 respostas

0

Se sua plataforma for compatível com a edição no local com sed , tente algo como

sed -i "1i\
First line\
$(date)" *

Infelizmente, essa parte de sed é um pouco complicada; Lembro-me de ter dificuldade em descobrir a sintaxe precisa da documentação.

    
por 03.05.2017 / 07:43
0

Primeiro, seu comando:

echo -e "% First Line\n% "$(date)"\n\n$(cat file1.txt)">file1.txt

Isso não é altamente recomendado. Se o arquivo contiver alguma barra invertida, você estará com problemas. Por favor, leia sobre cotação e substituição de comandos.

Para um único arquivo, a maneira POSIX recomendada para inserir linhas no início do arquivo é:

printf '%s\n' 0a 'First line' '2nd line; 3rd line is empty' '' . x | ex file.txt

0a significa "acrescentar depois da linha 0." É um comando para ex , o editor de arquivos POSIX (e outra forma do editor vi , aliás). O . em uma linha, por si só, finaliza o acréscimo. x salva e sai.

Para fazer vários arquivos de uma vez, use um loop for e um arquivo glob:

for f in *.txt; do
  printf '%s\n' '# This line heads all files' . x | ex "$f"
done
    
por 03.05.2017 / 06:35
0
perl -i -lpe '
   $FNR++ or print "% First Line\n%", 'date', $\;
   $FNR = 0 if eof;
' *.txt

Somente para a primeira linha de entrada para cada arquivo, imprimimos as strings desejadas. Colocamos o ORS $\ no print para colocar a nova linha extra como o OP requer com base na instrução echo .

    
por 03.05.2017 / 11:00

Tags