GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo inserto texto en la primera línea de un archivo usando sed?

Supongamos que tiene un file así:

one
two

Luego, para agregar a la primera línea:

$ sed '1 s_$_/etc/example/live/example.com/fullchain.pem;_' file
one/etc/example/live/example.com/fullchain.pem;
two

Para insertar antes de la primera línea:

$ sed '1 i /etc/example/live/example.com/fullchain.pem;' file
/etc/example/live/example.com/fullchain.pem;
one
two

O, para agregar después de la primera línea:

$ sed '1 a /etc/example/live/example.com/fullchain.pem;' file
one
/etc/example/live/example.com/fullchain.pem;
two

Anota el número 1 en esos sed expresiones - eso se llama la dirección en sed terminología. Te dice en qué línea el comando que sigue es operar.

Si su archivo no contiene la línea a la que se dirige, el sed el comando no se ejecutará. Es por eso que no puede insertar/agregar en la línea 1, si su archivo está vacío.

En lugar de usar editor de secuencias , para agregar (a archivos vacíos), solo use una redirección de shell >> :

echo "content" >> file

Su problema surge del hecho de que sed no puede ubicar la línea en la que le está diciendo que escriba, por ejemplo:

touch test
sed -i -e '1i/etc/example/live/example.com/fullchain.pem;\' test

intenta escribir para insertar en la línea 1 de test , pero esa línea no existe en este punto. Si ha creado su archivo como:

echo -en "\n" > test
sed -i '1i/etc/example/live/example.com/fullchain.pem;\' test

no se quejaría, pero tendría una línea extra. Del mismo modo, cuando llamas:

sed -i "2i ssl_certificate_key /etc/example/live/example.com/privkey.pem;"

le estás diciendo a sed para insertar los siguientes datos en la línea 2 que no existe en ese punto entonces sed no puede editar el archivo.

Entonces, para la línea inicial o la última línea del archivo, no debe usar sed porque simple > y >> las redirecciones de flujo son más que suficientes.


Su comando funcionará si se asegura de que el archivo de entrada tenga al menos una línea:

[ "$(wc -l < test)" -gt 0 ] || printf '\n' >> test
sed -i -e '1 i/etc/example/live/example.com/fullchain.pem;\' test

Linux
  1. Cómo extraer el archivo tar.gz en Linux usando la línea de comandos

  2. Manipulación de texto en la línea de comando con sed

  3. ¿Cómo insertar texto antes de la primera línea de un archivo?

  4. ¿Cómo eliminar las primeras N líneas de un archivo ASCII usando los comandos de Shell?

  5. Crear archivos usando la línea de comando en Linux

Cómo descargar un archivo en Ubuntu usando la línea de comandos

Cómo descargar un archivo en Ubuntu Linux usando la línea de comandos

Cómo agregar texto al comienzo del archivo en Linux

Cómo quitar líneas de un archivo usando el comando Sed

Cómo eliminar el texto seleccionado en el editor vi

¿Cómo leer la última línea de un archivo de texto en una variable usando Bash?