¿Cuál es la forma más rápida de agregar texto a un archivo desde la línea de comandos?


30

Ocasionalmente, pienso que quiero escribir en un archivo mientras estoy en la terminal. Quisiera que todas estas notas estén en el mismo archivo, solo enumeradas una tras otra. También me gustaría una etiqueta de fecha / hora en cada uno.

¿Es posible hacer esto sin tener que abrir el archivo cada vez? ¿Puedo ingresarlo en la terminal y agregarlo al archivo cada vez con un comando o script?

Estoy usando GNU BASH.

Respuestas:


25

Escríbete un script de shell llamado "n". Pon esto en esto:

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

Recomiendo esto en lugar de cat >> notefileporque:

  1. Un día tendrás tanta prisa que buscarás el >> y teclearás> y borrarás tu archivo.
  2. Emacs comienza en cinco centésimas de segundo en mi Mac Mini. Me toma una décima de segundo comenzar con un sistema basado en Celeron de diez años que tengo sentado. Si no puede esperar tanto tiempo para comenzar a escribir, entonces ya es una máquina y no necesita tomar notas. :)

Si insiste en evitar un editor de texto, use una función de shell:

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

que debería funcionar en todos los shells que reclaman compatibilidad con Bourne shell.


1
¿Cómo nescribe la función en el archivo? ¿No te refieres a algo como un en echo "$*"lugar de UUOC ? ¿Cómo incorpora la etiqueta de fecha / hora?
jasonwryan

1
No del todo inútil. Se lee desde stdin, que es donde el usuario escribirá su nota. Sin embargo, olvidé el sello de fecha.
Kyle Jones

No estoy necesariamente de acuerdo con el UUOC, pero tienes que señalar la fecha ...
jasonwryan

55
+1 agradable codificación defensiva y justificación contra el inevitable error tipográfico.
msw

2
Kyle, obviamente no tienes 90 MB .emacs.d. Ay, tengo que limpiar eso.
quodlibetor

19

Además, para escribir varias líneas en un archivo desde la línea de comandos, haga lo siguiente:

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

1
O cat > sometextfile.txt << EOFpara sobrescribir el archivo existente.
mbomb007

10

Solo usa echo:

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

Puede usar >> para agregar a un archivo, o usar> para sobrescribirlo.


3

¡Muchas lindas campanas y silbatos aquí!

Método KISS:

date >>filename; cat >>filename


1

Dependiendo de sus necesidades, syslogd podría ser otra herramienta para examinar detenidamente. El comando

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

registrará el mensaje con la facilidad user.notice. Con muchos sistemas Linux, esto será suficiente para tener un archivo /var/log/user.log abierto y anexado, con otros puede que necesite definir un manejo para esa instalación y nivel de registro (o, según la instalación que elija, el local0 a local7 las instalaciones son generalmente libres de asignar a cosas como esta.

Tiene el beneficio de poder (también conocido como configurable) enviar notas desde las máquinas cliente a un servidor de registro central, algo que me gusta usar para realizar un seguimiento de las acciones administrativas, ya que conserva la información de marca de tiempo, usuario y host de forma automática, mientras mantiene las acciones en orden .

salida resultante en archivo local:

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

Ejemplo para la línea de configuración de syslog en Solaris :

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

Nota: Se procesa ifdefpreviamente con m4, en la máquina con el nombre de host / hostalias "loghost", los mensajes se registrarán en el archivo / var / log / diary, en todos los demás, se enviarán al servicio remoto de syslog en loghost. Para probar este tipo de configuración, el archivo de configuración se puede enviar a través de m4 para expansión (deje de lado -D LOGHOSTpara ver cómo se vería en un sistema no llamado loghost :

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



0

Combinando algunas respuestas diferentes para lograr lo que buscaba, que eran múltiples opciones.

  1. Rápido
    user @ hostname: ~ / Documents $ echo text >> nombre de archivo
    user @ hostname: ~ / Documents $ cat filename
    texto
    
  2. Líneas múltiples
    user @ hostname: ~ / Documents $ cat >> filename2 << EOF
    > línea de texto 1
    > línea de texto 2
    > línea de texto 3
    > EOF
    usuario @ nombre de host: ~ / Documentos $ cat filename2  
    línea de texto 1
    línea de texto 2
    línea de texto 3
    
    1. Modificar un archivo en un número de línea dado

      user @ hostname: ~ / Documents $ sed -i '2iinserting new line' filename2
      usuario @ nombre de host: ~ / Documentos $ cat filename2
      línea de texto 1
      insertando nueva línea
      línea de texto 2
      línea de texto 3
      
    Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
    Licensed under cc by-sa 3.0 with attribution required.