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 echoo 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 echoo 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 sudoanteposto. Recentemente ho scoperto che funziona anche con nanoecc (cercando accidentalmente di nano nano auth...)
!!prima, fantastico. Così spesso faccio cose come cat /var/log/apache/error.loge ottengo il permesso negato. Questo potrebbe anche essere fatto con un id dalla cronologia sudo !1419, ad esempio , questo eseguirà il comando alla riga 1419nella 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 printfallo 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 noclobbervariabile 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 echoaggiunge un carattere di nuova riga finale che può essere soppresso utilizzando il -nflag:
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 noclobbertuo .bashrcquindi 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 -aaggiungerà alla fine del file.
Se necessario sudo, usa:
echo "text" | sudo tee -a filename >/dev/null
>/dev/nullfine 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 teeinvece 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