Scrivere una parola in ogni file txt in una cartella


10

Come posso scrivere la parola "gatto" in ogni file .txt in una cartella?

Risposte:


20

Un semplice per farà il lavoro:

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

Verrà visualizzato un elenco di tutti i file txt nella directory corrente, si eseguirà un loop su di essi e si echoinserirà in essi (aggiungendo al contenuto). puoi cambiare >>in >, per sovrascrivere il contenuto dei file con cat.

Un'altra cosa che puoi fare è utilizzare teeper reindirizzare uno stream su più file.

Per aggiungere:

echo "cat" | tee -a *.txt

Per sovrascrivere:

echo "cat" | tee *.txt

qual è la truffa da usare echo "cat" >> *.txt?
hytromo,

4
@hakermania che dovrebbe fallire conambiguous redirect
Zanna

13

Se i file non sono vuoti è possibile utilizzare sedsenza loop. Per aggiungere catall'inizio:

sed 'i\cat' *.txt

Aggiungere alla fine:

sed 'a\cat' *.txt

Per aggiungere dopo la seconda riga:

sed '2 a\cat' *.txt

Per aggiungere prima delle righe con fooin esse:

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

Tuttavia, non funziona su file vuoti. Tipo di bug.

(Per davvero scrivere i file dopo il test è necessario l' -iopzione di: sed -i 'a\cat' *.txt)


Odio sed :)), perché ci sono molte cose che puoi farci e non ne sono consapevole :))
Ravexina

@Ravexina sedis my jam;)
Zanna

perché 'i\cat'usa la barra rovesciata anziché la barra?
phuclv,

@ LưuVĩnhPhúc la barra rovesciata è in realtà facoltativa, puoi anche mettere 'icat'o i cat. La barra rovesciata è convenzionale credo. Non puoi usare forwardslash - verrà letteralmente inserito
Zanna il

4

Approccio Python:

#!/usr/bin/env python
import sys

for i in sys.argv[1:]:
    with open(i,'w') as fd:
        fd.write("cat\n")
  • utilizza il sysmodulo per scorrere gli argomenti della riga di comando
  • ogni argomento della riga di comando sarà aperto come file per la scrittura
  • "cat" con newline verrà scritto nel file prima di passare al successivo

L'utilizzo sarebbe come ./add_cat.py *.txt, che opererebbe su tutti i .txtfile nella directory di lavoro corrente. Il miglioramento a questo potrebbe includere l'uso dell'argomento da riga di comando n. 1 come stringa per scrivere invece di codificare "cat" lì.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.