Me gustaría insertar una variable antes de la última línea.
Este es mi archivo.
$ cat file.txt
one
two
three
four
five
Cuando lo intento sin usar variables, funciona bien.
$ sed -i '$i name' file.txt
$ cat file.txt
one
two
three
four
name
five
Cuando uso una variable, no funciona. Probé diferentes combinaciones de comillas dobles y barras invertidas.
$ NAME=name
$ sed -i '$i "$NAME"' file.txt
$ cat file.txt
one
two
three
four
"$NAME"
five
Respuesta1
En bash
, las comillas simples son para cadenas literales fijas. Las comillas dobles se utilizan cuando desea que se produzca interpolación de variables, sustitución de comandos, etc.
Su sed
comando debe usar un literal $
(para que el i
comando se aplique a la última línea del archivo)Y $NAME
para que la variable se interpola. Para hacer esto, necesita "escapar" del literal $
con una barra invertida para que el shell no interprete $i
en su script sed como "reemplazar con el contenido de la variable $i" en lugar de "literal $
seguido de literal i
":
Por cierto, es mejor probar cosas como esta sin usar la -i
opción, para sed
no estropear tu archivo de entrada mientras descubres la sintaxis correcta. Agregue este -i
último cuando esté seguro de que está haciendo exactamente lo que desea.
$ NAME=name
$ sed "\$i $NAME" file.list
one
two
three
four
name
five
Respuesta2
De otra manera:
$ NAME=name
$ sed '$i '"$NAME" file.list
one
two
three
four
name
five