Qual è il modo più rapido per aggiungere testo a un file dalla riga di comando?


30

Occasionalmente ho pensato di voler scrivere in un file mentre sono al terminale. Vorrei che queste note fossero tutte nello stesso file, elencate una dopo l'altra. Vorrei anche un tag data / ora su ognuno.

È possibile farlo senza dover aprire il file ogni volta? Posso semplicemente inserirlo nel terminale e averlo aggiunto al file ogni volta con un comando o uno script?

Sto usando GNU BASH.

Risposte:


25

Scrivi uno script di shell chiamato "n". Mettici questo:

#!/bin/sh
notefile=/home/me/notefile
date >> $notefile
emacs $notefile -f end-of-buffer

Consiglio questo invece che cat >> notefileperché:

  1. Un giorno avrai così tanta fretta che ti armeggierai con >> e digita> e spazzerai via il tuo file.
  2. Emacs inizia tra cinque centesimi di secondo sul mio Mac Mini. Ci vuole un decimo di secondo per iniziare un sistema basato su Celeron di dieci anni in cui mi siedo. Se non puoi aspettare così tanto per iniziare a scrivere, allora sei già un dispositivo e non devi prendere appunti. :)

Se insisti a evitare un editor di testo, usa una funzione di shell:

n () { date >> /home/me/notefile; cat >> /home/me/notefile; }

che dovrebbe funzionare in tutte le shell che rivendicano la compatibilità della shell Bourne.


1
In che modo la nfunzione scrive nel file? Non intendi qualcosa di simile a un UUOCecho "$*" anziché ? Come incorpora il tag data / ora?
Jasonwryan,

1
Non del tutto inutile. Legge da stdin, che è dove l'utente digiterà la sua nota. Tuttavia, ho dimenticato il datestamp.
Kyle Jones,

Non sono necessariamente d'accordo sull'UUOC, ma devi indicare la data ...
Jasonwryan,

5
+1 bella codifica difensiva e motivazioni contro l'inevitabile errore di battitura.
msw,

2
Kyle, ovviamente non hai 90 MB .emacs.d. Yikes, ho bisogno di ripulirlo.
quodlibetor,

19

Inoltre, per scrivere più righe in un file dalla riga di comando, eseguire:

cat >> sometextfile.txt << EOF
text
more text
and another line
EOF

1
O cat > sometextfile.txt << EOFper sovrascrivere il file esistente.
mbomb007,

10

Usa solo echo:

echo $(date) Hi. >> notes.txt

È possibile utilizzare >> per aggiungere a un file oppure> per sovrascriverlo.


3

Un sacco di bellissime campane e fischietti qui!

Metodo KISS:

date >>filename; cat >>filename


1

A seconda delle tue esigenze, syslogd potrebbe essere un altro strumento da esaminare. Il comando

theuser@tetrad:~$ logger This message is sent to syslog

registrerà il messaggio con la funzione user.notice. Con molti sistemi Linux questo sarà sufficiente per avere un file /var/log/user.log aperto e aggiunto, con altri potrebbe essere necessario definire una gestione per quella struttura e livello di registro (o, qualunque struttura si scelga - il local0 a local7 le strutture sono generalmente libere di assegnare a cose del genere.

Ha il vantaggio di essere in grado (alias configurabile) di inviare note dai computer client a un server di registrazione centrale, qualcosa che mi piace usare per tenere traccia delle azioni amministrative poiché conserva le informazioni di data e ora, utente e host in modo automatico, mantenendo le azioni in ordine .

risultato risultante nel file locale:

theuser@tetrad:~$ tail /var/log/user.log
Jan 31 07:18:37 tetrad theuser: This message is sent to syslog

Esempio per la riga di configurazione syslog su Solaris :

local5.notice             ifdef(`LOGHOST', /var/log/diary, @loghost)

Nota: L' ifdefelaboratore è preelaborato m4, sulla macchina con il nome host / hostalias "loghost", i messaggi verranno registrati nel file / var / log / diary, su tutti gli altri, verranno inviati al servizio remoto syslog su loghost. Per testare questo tipo di configurazione, il file di configurazione può essere inviato tramite m4 per l'espansione (lasciare il -D LOGHOSTper vedere come apparirebbe su un sistema non chiamato loghost :

theuser@solstice$ /usr/ccs/bin/m4 -D LOGHOST /etc/syslog.conf



0

Combinando alcune risposte diverse per ottenere ciò che ho cercato, che era più opzioni.

  1. Presto
    user @ hostname: ~ / Documents $ echo text >> nome file
    user @ hostname: ~ / Documents $ cat nomefile
    testo
    
  2. Linee multiple
    user @ hostname: ~ / Documents $ cat >> nomefile2 << EOF
    > riga di testo 1
    > riga di testo 2
    > riga di testo 3
    > EOF
    user @ hostname: ~ / Documents $ cat nomefile2  
    riga di testo 1
    riga di testo 2
    riga di testo 3
    
    1. Modifica un file a un determinato numero di riga

      user @ hostname: ~ / Documents $ sed -i '2iinserimento nuova riga' nomefile2
      user @ hostname: ~ / Documents $ cat nomefile2
      riga di testo 1
      inserendo nuova riga
      riga di testo 2
      riga di testo 3
      
    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.