Abrir y escribir datos en un archivo de texto usando bash / shell scripting

¿Cómo puedo escribir datos en un archivo de texto automáticamente mediante scripts de shell en Linux?

Pude abrir el archivo. Sin embargo, no sé cómo escribirle datos.

echo "some data for the file" >> fileName 
 #!/bin/sh FILE="/path/to/file" /bin/cat <$FILE text1 text2 text3 text4 EOM 

Puede redirigir la salida de un comando a un archivo:

 $ cat file > copy_file 

o anexarlo

 $ cat file >> copy_file 

Si quiere escribir directamente, el comando es echo 'text'

 $ echo 'Hello World' > file 
 #!/bin/bash cat > FILE.txt < 

Sé que esta es una vieja y maldita pregunta, pero como OP es sobre scripting, y por el hecho de que google me trajo aquí, también se debe mencionar la apertura de descriptores de archivos para leer y escribir al mismo tiempo.

 #!/bin/bash # Open file descriptor (fd) 3 for read/write on a text file. exec 3<> poem.txt # Let's print some text to fd 3 echo "Roses are red" >&3 echo "Violets are blue" >&3 echo "Poems are cute" >&3 echo "And so are you" >&3 # Close fd 3 exec 3>&- 

Luego cat el archivo en la terminal

 $ cat poem.txt Roses are red Violets are blue Poems are cute And so are you 

Este ejemplo hace que el archivo poem.txt se abra para leer y escribir en el descriptor 3 de archivos. También muestra que las casillas * nix saben más fd que simplemente stdin, stdout y stderr (fd 0,1,2). En realidad tiene mucho. Por lo general, el número máximo de descriptores de archivos que el kernel puede asignar se puede encontrar en /proc/sys/file-max o /proc/sys/fs/file-max pero usar cualquier fd por encima de 9 es peligroso ya que podría entrar en conflicto con fd utilizado por el caparazón internamente. Así que no te molestes y solo usa fd’s 0-9. Si necesita más los 9 descriptores de archivos en un script bash, debe usar un idioma diferente de todos modos 🙂

De todos modos, los fd se pueden usar de muchas maneras interesantes.

Me gusta esta respuesta:

 cat > FILE.txt < 

pero sugeriría cat >> FILE.txt << EOF si solo quiere agregar algo al final del archivo sin borrar lo que ya existe

Me gusta esto:

 cat >> FILE.txt < 

Moviendo mi comentario como respuesta, como solicitó @lycono

Si necesita hacer esto con los privilegios de root, hágalo de esta manera:

 sudo sh -c 'echo "some data for the file" >> fileName' 

Para los entornos donde los documentos aquí no están disponibles ( Makefile , Dockerfile , etc.) a menudo puede usar printf para una solución razonablemente legible y eficiente.

 printf '%s\n' '#!/bin/sh' '# Second line' \ '# Third line' \ '# Conveniently mix single and double quotes, too' \ "# Generated $(date)" \ '# ^ the date command executes when the file is generated' \ 'for file in *; do' \ ' echo "Found $file"' \ 'done' >outputfile