Cómo agregar resultados al final de un archivo de texto

478

¿Cómo agrego la salida de un comando al final de un archivo de texto?

vincy
fuente

Respuestas:

665

Use en >>lugar de >cuando dirige la salida a un archivo:

your_command >> file_to_append_to

Si file_to_append_tono existe, se creará.

Ejemplo:

$ echo "hello" > file
$ echo "world" >> file
$ cat file 
hello
world
aioobe
fuente
44
El problema es que echoelimina las nuevas líneas de la cadena. ¿Cómo se agrega a un archivo una cadena que contiene nuevas líneas?
Timothy Swan
55
@TimothySwan, creo que con la opción -e.
Valentin Grégoire
echo no elimina las nuevas líneas de la cadena. Si no cita correctamente el argumento, el shell dividirá la cadena y pasará los argumentos a echo y echo nunca verá las nuevas líneas.
William Pursell
106

Para appendusar un archivo >>

echo "hello world"  >> read.txt   
cat read.txt     
echo "hello siva" >> read.txt   
cat read.txt

entonces la salida debería ser

hello world   # from 1st echo command
hello world   # from 2nd echo command
hello siva

Para overwriteusar un archivo >

echo "hello tom" > read.txt
cat read.txt  

entonces la salida es

hello tom

yoctotutor.com
fuente
74

Puede usar el operador >>. Esto agregará datos de un comando al final de un archivo de texto.

Para probar esto intente ejecutar:

echo "Hi this is a test" >> textfile.txt

Haga esto un par de veces y luego ejecute:

cat textfile.txt

Verá que su texto se ha agregado varias veces al archivo textfile.txt.

walta
fuente
40

Use command >> file_to_append_topara agregar a un archivo.

Por ejemplo echo "Hello" >> testFile.txt

PRECAUCIÓN: si solo usa >uno, sobrescribirá el contenido del archivo. Para asegurarse de que eso nunca suceda, puede agregar set -o noclobbera su .bashrc.

Esto garantiza que si accidentalmente escribe command > file_to_append_toen un archivo existente, le alertará de que el archivo ya existe. Mensaje de error de muestra:file exists: testFile.txt

Por lo tanto, cuando lo use >solo le permitirá crear un nuevo archivo, no sobrescribir un archivo existente.

arte
fuente
22

Use el >>operador para agregar texto a un archivo.

Nev Stokes
fuente
21

El uso de tee con la opción -a (--append) le permite agregar múltiples archivos a la vez y también usar sudo (muy útil al agregar archivos protegidos). Además de eso, es interesante si necesita usar otros shells además de bash, ya que no todos los shells admiten los operadores> y >>

echo "hello world" | sudo tee -a output.txt

Este hilo tiene buenas respuestas sobre tee

victortv
fuente
2
Esta es la mejor manera de agregar algo con una nueva línea.
M_R_K
2
estaba buscando una manera de agregar archivos protegidos y esto lo resuelve
Woootiness
14

para toda la pregunta:

cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt

esto agregará 720 líneas (30 * 24) a o.txt y luego cambiará el nombre del archivo según la fecha actual.

Ejecute lo anterior con el cron cada hora, o

while :
do
    cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
    sleep 3600
done
jm666
fuente
11

Usaría printf en lugar de echo porque es más confiable y procesa el formateo como una nueva línea \ncorrectamente.

Este ejemplo produce una salida similar a echo en ejemplos anteriores:

printf "hello world"  >> read.txt   
cat read.txt
hello world

Sin embargo, si reemplazara printf con echo en este ejemplo, echo trataría \ n como una cadena, ignorando así la intención

printf "hello\nworld"  >> read.txt   
cat read.txt
hello
world
Braden Holt
fuente
7

Te sugiero que hagas dos cosas:

  1. Úselo >>en su script de shell para agregar contenido a un archivo en particular. El nombre del archivo se puede corregir o usar algún patrón.
  2. Configure un cronjob por hora para activar el script de shell
sballmer
fuente
7

Por ejemplo, su archivo contiene:

 1.  mangesh@001:~$ cat output.txt
    1
    2
    EOF

si desea agregar al final del archivo, entonces ----> recuerde los espacios entre 'texto' >> 'nombre de archivo'

  2. mangesh@001:~$ echo somthing to append >> output.txt|cat output.txt 
    1
    2
    EOF
    somthing to append

Y para sobrescribir el contenido del archivo:

  3.  mangesh@001:~$ echo 'somthing new to write' > output.tx|cat output.tx
    somthing new to write
Mangesh Bhapkar
fuente
1
Esto es engañoso en muchos detalles. Los espacios no son importantes y canalizar una salida vacía cates ... simplemente completamente loco. (Está vacío porque acaba de redirigir la salida estándar a un archivo.)
tripleee