Escrevendo uma palavra em cada arquivo txt em uma pasta

10

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

Qubix
fonte

Respostas:

20

Um simples para fará o trabalho:

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

Isso irá obter uma lista de todos os arquivos txt no diretório atual, fazer um loop em todos eles e echocolocar um gato neles (anexado ao conteúdo). você pode alterar >>para >, para substituir o conteúdo dos arquivos com cat.

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

Para anexar:

echo "cat" | tee -a *.txt

Para substituir:

echo "cat" | tee *.txt
Ravexina
fonte
qual é o golpe para usar echo "cat" >> *.txt?
Hytromo # 11/17
4
@hakermania que deve falhar comambiguous redirect
Zanna
13

Se os arquivos não estiverem vazios, você pode usá-lo sedsem fazer loop. Para adicionar catno 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 fooelas:

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

Porém, ele não funciona em arquivos vazios. Tipo de bug.

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

Zanna
fonte
Eu odeio sed :)), porque há um monte de coisas que você pode fazer com ele e eu não estou ciente deles :))
Ravexina
@Ravexina sedis my jam;)
Zanna
por que 'i\cat'usar a barra invertida em vez da barra?
precisa saber é
@ LưuVĩnhPhúc a barra invertida é opcional, na verdade, você também pode colocar 'icat'or i cat. A barra invertida é convencional, acredito. Você não pode usar forwardslash - será literalmente inserida
Zanna
4

Abordagem Python:

#!/usr/bin/env python
import sys

for i in sys.argv[1:]:
    with open(i,'w') as fd:
        fd.write("cat\n")
  • ele usa o sysmódulo 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 .txtarquivos no diretório de trabalho atual. A melhoria para isso pode incluir o uso do argumento nº 1 da linha de comando como string para escrever em vez de codificar "cat" lá.

Sergiy Kolodyazhnyy
fonte