Crea un archivo de texto y rellénalo usando bash

81

Necesito crear un archivo de texto (a menos que ya exista) y escribir una nueva línea en el archivo, todo usando bash.

Estoy seguro de que es simple, pero ¿alguien podría explicarme esto?

Switz
fuente

Respuestas:

41

Si desea esto como una secuencia de comandos, la siguiente secuencia de comandos de Bash debe hacer lo que desee (además de indicarle cuando el archivo ya existe):

#!/bin/bash
if [ -e $1 ]; then
  echo "File $1 already exists!"
else
  echo >> $1
fi

Si no desea el mensaje "ya existe", puede usar:

#!/bin/bash
if [ ! -e $1 ]; then
  echo >> $1
fi

Editar sobre el uso:

Guarde la versión con el nombre que desee, digamos "create_file" (cita el mío, no los quiere en el nombre del archivo). Luego, para hacer que el archivo sea ejecutable, en un símbolo del sistema, haga lo siguiente:

chmod u+x create_file

Coloque el archivo en un directorio en su ruta , luego úselo con:

create_file NAME_OF_NEW_FILE

$ 1 es una variable de shell especial que toma el primer argumento en la línea de comando después del nombre del programa; es decir, $ 1 recogerá NAME_OF_NEW_FILE en el ejemplo de uso anterior.

GreenMatt
fuente
¿Puedo reemplazarlo con "text.txt"?
Suiza
1
@Switz: Ver edición que explica $ 1. Si reemplaza $ 1 en el script con "text.txt", siempre usará "text.txt" como nombre de archivo.
GreenMatt
102

La creación de un archivo de texto en Unix se puede realizar a través de un editor de texto (vim, emacs, gedit, etc.). Pero lo que quieres puede ser algo como esto

echo "insert text here" > myfile.txt

Eso pondrá el texto 'insertar texto aquí' en un archivo myfile.txt. Para verificar que esto funcionó, use el comando 'gato'.

cat myfile.txt

Si desea agregar a un archivo, use este

echo "append this text" >> myfile.txt
ostler.c
fuente
20

Suponiendo que te refieres a los comandos de shell de UNIX, simplemente ejecuta

echo >> file.txt

echoimprime una nueva línea, y >>le dice al shell que agregue esa nueva línea al archivo, creando si aún no existe.

Sin embargo, para responder correctamente a la pregunta, necesito saber qué le gustaría que sucediera si el archivo ya existe. Si quisiera reemplazar su contenido actual con la nueva línea, por ejemplo, usaría

echo > file.txt

EDITAR: y en respuesta al comentario de Justin, si desea agregar la nueva línea solo si el archivo aún no existía, puede hacerlo

test -e file.txt || echo > file.txt

Al menos eso funciona en Bash, no estoy seguro de si también funciona en otros shells.

David Z
fuente
+1. Creo que hay otra interpretación posible: cree y escriba una nueva línea si el archivo aún no existe; de ​​lo contrario, no modifique el archivo en absoluto.
Justin Ardini
@Justin: buen punto, supongo que puedo agregar eso también y tendremos todas las opciones cubiertas.
David Z
6
#!/bin/bash
file_location=/home/test/$1.json
if [ -e $policy ]; then
  echo "File $1.json already exists!"
else
  cat > $file_location <<EOF
{
      "contact": {
          "name": "xyz",
          "phonenumber":   "xxx-xxx-xxxx"
      }
    }
EOF
fi

Este código verifica si el archivo JSON dado del usuario está presente en el directorio de inicio de prueba o no. Si no está presente, lo creará con el contenido. Puede modificar la ubicación y el contenido del archivo según sus necesidades.

Oficial médico
fuente
2

Tu pregunta es un poco vaga. Este es un comando de shell que hace lo que creo que quieres hacer:

echo >> name_of_file
zwol
fuente