2013-07-17 17 views
56

Qual è il modo più semplice per aggiungere testo a un file in Linux?Come applico il testo a un file?

Ho avuto uno sguardo at this question, ma la risposta accettata utilizza un programma aggiuntivo (sed) Sono sicuro che ci dovrebbe essere un modo più semplice con echo o simile.

risposta

75
cat >> filename 
This is text, perhaps pasted in from some other source. 
Or else entered at the keyboard, doesn't matter. 
^D 

In sostanza, è possibile scaricare qualsiasi testo che si desidera nel file. CTRL-D invia un segnale di fine file, che termina l'input e ti riporta alla shell.

+0

@JonKiparsky: Mi dispiace, non ho visto che è stato scritto nella risposta ... –

+1

Come posso fare quando il file ha bisogno dell'autorizzazione root? – UselesssCat

100

ne dite:

echo "hello" >> <filename> 

Utilizzando l'operatore >> aggiungerà i dati alla fine del file, mentre si utilizza il > sovrascriverà il contenuto del file se già esistente.

Si potrebbe anche usare printf nello stesso modo:

printf "hello" >> <filename> 

Nota che può essere pericoloso utilizzare quanto sopra. Ad esempio se hai già un file e devi aggiungere i dati alla fine del file e ti sei dimenticato di aggiungere l'ultimo > tutti i dati nel file verranno distrutti. È possibile modificare questo comportamento impostando la variabile noclobber nel .bashrc:

set -o noclobber 

Ora, quando si tenta di fare echo "hello" > file.txt si otterrà un avviso dicendo cannot overwrite existing file.

Per forzare la scrittura per il file ora è necessario utilizzare la sintassi speciale:

echo "hello" >| <filename> 

Si dovrebbe anche sapere che per default echo aggiunge un carattere finale nuova linea, che può essere soppresso utilizzando il flag -n:

echo -n "hello" >> <filename> 

Riferimenti

+2

In generale, questo mi piace più della risposta accettata che usa 'cat', ma farai meglio ad assicurarti di usare' >> 'invece di'> '! – sixty4bit

+0

@ sixty4bit - Totalmente d'accordo, ma penso che tu debba sempre sapere cosa stai facendo quando lavori con una shell, altrimenti potresti fare qualcosa come 'sudo rm -r /' =) – Cyclonecode

+0

meglio 'sudo rm -r /' di 'sudo rm -rf /'!^_^C'è una bandiera che chiederebbe conferma prima di sovrascrivere il contenuto di un file esistente con '>'? Aliasing che usare sempre una tale bandiera sembra una buona idea. – sixty4bit

14

altro modo possibile è:

echo "text" | tee -a filename 

Il -a aggiungerà alla fine del file.

7

Seguito alla risposta accettata.

Avete bisogno di qualcosa di diverso da CTRL-D to designate the end if using this in a script. Prova a modificare:

cat <<EOF>> filename 
This is text entered via the keyboard or via a script. 
EOF 

Ciò aggiungere testo al file dichiarato (non incluso "EOF").

Utilizza uno here document (or heredoc).

Tuttavia, se è necessario sudo per aggiungere al file indicato, si verificheranno dei problemi utilizzando un heredoc a causa del reindirizzamento I/O se si sta digitando direttamente sulla riga di comando.

Questa variazione funzionerà quando si sta digitando direttamente sulla riga di comando:

sudo sh -c 'cat <<EOF>> filename 
This is text entered via the keyboard. 
EOF' 

Oppure è possibile utilizzare tee invece per evitare il problema sudo riga di comando visto quando si utilizza l'heredoc con il gatto:

tee -a filename << EOF 
This is text entered via the keyboard or via a script. 
EOF 
Problemi correlati