Come aggiungere l'output alla fine di un file di testo


478

Come posso aggiungere l'output di un comando alla fine di un file di testo?

Risposte:


665

Utilizzare >>invece di >quando si dirige l'output su un file:

your_command >> file_to_append_to

Se file_to_append_tonon esiste, verrà creato.

Esempio:

$ echo "hello" > file
$ echo "world" >> file
$ cat file 
hello
world

4
Il problema è che echorimuove le nuove righe dalla stringa. Come si aggiunge a un file una stringa che contiene newline?
Timothy Swan,

5
@ TimothySwan, credo con l'opzione -e.
Valentin Grégoire,

echo non rimuove le nuove righe dalla stringa. Se non riesci a citare correttamente l'argomento, la shell dividerà la stringa e passerà gli argomenti a eco e eco non vedrà nemmeno le nuove righe.
William Pursell,

106

Per appendun file utilizzare >>

echo "hello world"  >> read.txt   
cat read.txt     
echo "hello siva" >> read.txt   
cat read.txt

quindi l'output dovrebbe essere

hello world   # from 1st echo command
hello world   # from 2nd echo command
hello siva

Per overwriteun file utilizzare >

echo "hello tom" > read.txt
cat read.txt  

allora il risultato è

hello tom


74

È possibile utilizzare l'operatore >>. Questo aggiungerà i dati da un comando alla fine di un file di testo.

Per provare questo prova a eseguire:

echo "Hi this is a test" >> textfile.txt

Fallo un paio di volte e poi esegui:

cat textfile.txt

Vedrai che il tuo testo è stato aggiunto più volte al file textfile.txt.


40

Utilizzare command >> file_to_append_toper aggiungere a un file.

Per esempio echo "Hello" >> testFile.txt

ATTENZIONE: se si utilizza solo un singolo, >si sovrascriverà il contenuto del file. Per assicurarti che ciò non accada mai, puoi aggiungere set -o noclobberal tuo .bashrc.

Ciò garantisce che se si digita accidentalmente command > file_to_append_toin un file esistente, verrà avvisato che il file esiste già. Esempio di messaggio di errore:file exists: testFile.txt

Pertanto, quando lo usi >ti consentirà solo di creare un nuovo file, non di sovrascrivere un file esistente.



21

L'uso di tee con l'opzione -a (--append) consente di accodare a più file contemporaneamente e anche di usare sudo (molto utile quando si aggiunge a file protetti). Oltre a ciò, è interessante se è necessario utilizzare altre shell oltre a bash, poiché non tutte le shell supportano gli operatori> e >>

echo "hello world" | sudo tee -a output.txt

Questa discussione ha buone risposte su Tee


2
Questo è il modo migliore per aggiungere qualcosa con una nuova linea.
M_R_K

2
stava cercando un modo per aggiungere file protetti e questo lo risolve
Woootiness il

14

per l'intera domanda:

cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt

questo aggiungerà 720 righe (30 * 24) in o.txt e successivamente rinominerà il file in base alla data corrente.

Esegui quanto sopra con cron ogni ora o

while :
do
    cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
    sleep 3600
done

11

Vorrei usare printf invece di echo perché è più affidabile e elabora \ncorrettamente la formattazione come la nuova riga .

Questo esempio produce un output simile all'eco negli esempi precedenti:

printf "hello world"  >> read.txt   
cat read.txt
hello world

Tuttavia, se in questo esempio sostituissi printf con echo, echo tratterà \ n come una stringa, ignorando così l'intento

printf "hello\nworld"  >> read.txt   
cat read.txt
hello
world

7

Ti suggerirei di fare due cose:

  1. Utilizzare >>nello script della shell per aggiungere contenuti a un determinato file. Il nome del file può essere corretto o usando un modello.
  2. Imposta un cronjob orario per attivare lo script della shell

7

Ad esempio il tuo file contiene:

 1.  mangesh@001:~$ cat output.txt
    1
    2
    EOF

se vuoi aggiungere alla fine del file allora ----> ricorda gli spazi tra 'testo' >> 'nomefile'

  2. mangesh@001:~$ echo somthing to append >> output.txt|cat output.txt 
    1
    2
    EOF
    somthing to append

E per sovrascrivere i contenuti del file:

  3.  mangesh@001:~$ echo 'somthing new to write' > output.tx|cat output.tx
    somthing new to write

1
Questo è fuorviante in molti dettagli. Gli spazi non sono importanti e reindirizzare un output vuoto catè ... semplicemente stravagante. (È vuoto perché hai appena reindirizzato l'output standard su un file.)
Tripleee
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.