Qual è il modo più semplice per aggiungere testo a un file in Linux?
Ho dato un'occhiata a questa domanda , ma la risposta accettata utilizza un programma aggiuntivo ( sed
) Sono sicuro che dovrebbe esserci un modo più semplice con echo
o simile.
Qual è il modo più semplice per aggiungere testo a un file in Linux?
Ho dato un'occhiata a questa domanda , ma la risposta accettata utilizza un programma aggiuntivo ( sed
) Sono sicuro che dovrebbe esserci un modo più semplice con echo
o simile.
Risposte:
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter.
^D
In sostanza, puoi scaricare qualsiasi testo tu voglia nel file. CTRL-D invia un segnale di fine file, che termina l'input e ti riporta alla shell.
sudo !!
- che esegue l'ultimo comando con sudo
anteposto. Recentemente ho scoperto che funziona anche con nano
ecc (cercando accidentalmente di nano nano auth
...)
!!
prima, fantastico. Così spesso faccio cose come cat /var/log/apache/error.log
e ottengo il permesso negato. Questo potrebbe anche essere fatto con un id dalla cronologia sudo !1419
, ad esempio , questo eseguirà il comando alla riga 1419
nella cronologia come sudo.
Che ne dite di:
echo "hello" >> <filename>
L'utilizzo >>
dell'operatore aggiungerà i dati alla fine del file, mentre utilizzando il >
sovrascriverà il contenuto del file se già esistente.
Puoi anche usare printf
allo stesso modo:
printf "hello" >> <filename>
Nota che può essere pericoloso utilizzare quanto sopra. Ad esempio, se hai già un file e devi aggiungere dati alla fine del file e dimentichi di aggiungere l'ultimo, >
tutti i dati nel file verranno distrutti. Puoi modificare questo comportamento impostando la noclobber
variabile nel tuo .bashrc
:
set -o noclobber
Ora, quando proverai a farlo echo "hello" > file.txt
, riceverai un avviso che dice cannot overwrite existing file
.
Per forzare la scrittura sul file è ora necessario utilizzare la sintassi speciale:
echo "hello" >| <filename>
Dovresti anche sapere che di default echo
aggiunge un carattere di nuova riga finale che può essere soppresso utilizzando il -n
flag:
echo -n "hello" >> <filename>
Riferimenti
cat
, ma faresti meglio a stare attento assicurandoti di usare >>
invece di >
!
sudo rm -r /
=)
sudo rm -r /
di sudo rm -rf /
! ^ _ ^ C'è un flag che chiederebbe conferma prima di sovrascrivere il contenuto di un file esistente con >
? Aliasing che usare sempre una tale bandiera sembra che sarebbe una buona idea.
set -o noclobber
tuo .bashrc
quindi non puoi sovrascrivere un file esistente senza utilizzare la sintassi specialeecho "hello" >| <filename>
Un altro modo possibile è:
echo "text" | tee -a filename >/dev/null
Il -a
aggiungerà alla fine del file.
Se necessario sudo
, usa:
echo "text" | sudo tee -a filename >/dev/null
>/dev/null
fine impedisce che il "testo" venga mostrato nella tua console.
Follow-up alla risposta accettata.
Hai bisogno di qualcosa di diverso da CTRL-D per designare la fine se lo usi in uno script . Prova questo invece:
cat << EOF >> filename
This is text entered via the keyboard or via a script.
EOF
Questo aggiungerà testo al file indicato (escluso "EOF").
Utilizza un here document (o heredoc) .
Tuttavia, se hai bisogno di sudo da aggiungere al file indicato, ti imbatterai in problemi nell'utilizzo di heredoc a causa del reindirizzamento I / O se stai digitando direttamente sulla riga di comando.
Questa variazione funzionerà quando digiti direttamente dalla riga di comando:
sudo sh -c 'cat << EOF >> filename
This is text entered via the keyboard.
EOF'
Oppure puoi usare tee
invece per evitare il problema sudo della riga di comando visto quando usi heredoc con cat:
tee -a filename << EOF
This is text entered via the keyboard or via a script.
EOF
cat << 'EOF' >
da anni e non sapevo cat << 'EOF' >>
di aggiungere! Grazie