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