Escrevendo uma palavra em todo arquivo txt em uma pasta

10

Como posso escrever a palavra "cat" em todos os arquivos .txt em uma pasta?

    
por Qubix 11.04.2017 / 15:57

3 respostas

20

Um simples para o trabalho:

for i in ./*.txt; do echo 'cat' >> "$i"; done;

Isto irá obter uma lista de todos os arquivos txt no diretório atual, fazer um loop em todos eles e echo cat dentro deles (anexar ao conteúdo). você pode mudar >> para > , para sobrescrever o conteúdo dos arquivos com cat.

Outra coisa que você pode fazer é usar tee para redirecionar um fluxo para vários arquivos.

Para acrescentar:

echo "cat" | tee -a *.txt

Para substituir:

echo "cat" | tee *.txt
    
por Ravexina 11.04.2017 / 15:59
13

Se os arquivos não estiverem vazios, você poderá usar sed sem loop. Para adicionar cat no início:

sed 'i\cat' *.txt

Para adicionar no final:

sed 'a\cat' *.txt

Para adicionar após a segunda linha:

sed '2 a\cat' *.txt

Para adicionar linhas antes com foo :

sed '/foo/ i\cat' *.txt

Não funciona em arquivos vazios. Um tipo de bug.

(Para realmente gravar nos arquivos após o teste, você precisa da opção -i : sed -i 'a\cat' *.txt )

    
por Zanna 11.04.2017 / 16:15
4

Abordagem em Python:

#!/usr/bin/env python
import sys

for i in sys.argv[1:]:
    with open(i,'w') as fd:
        fd.write("cat\n")
  • usa o módulo sys para iterar sobre argumentos da linha de comando
  • cada argumento da linha de comando será aberto como arquivo para gravação
  • "cat" com nova linha será gravado no arquivo antes de ir para a próxima

O uso seria como ./add_cat.py *.txt , que operaria em todos os arquivos .txt no diretório de trabalho atual. Melhoria para isso poderia incluir o uso do argumento de linha de comando # 1 como string para escrever em vez de codificar "cat" lá.

    
por Sergiy Kolodyazhnyy 11.04.2017 / 19:48