Risposte:
Utilizzare >>
invece di >
quando si dirige l'output su un file:
your_command >> file_to_append_to
Se file_to_append_to
non esiste, verrà creato.
Esempio:
$ echo "hello" > file
$ echo "world" >> file
$ cat file
hello
world
Per append
un 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 overwrite
un file utilizzare >
echo "hello tom" > read.txt
cat read.txt
allora il risultato è
hello tom
È 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.
Utilizzare command >> file_to_append_to
per 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 noclobber
al tuo .bashrc
.
Ciò garantisce che se si digita accidentalmente command > file_to_append_to
in 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.
Utilizzare l' >>
operatore per aggiungere testo a un file.
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
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
Vorrei usare printf invece di echo perché è più affidabile e elabora \n
correttamente 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
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
cat
è ... semplicemente stravagante. (È vuoto perché hai appena reindirizzato l'output standard su un file.)
echo
rimuove le nuove righe dalla stringa. Come si aggiunge a un file una stringa che contiene newline?