sed insertar variable antes de la última línea

sed insertar variable antes de la última línea

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 sedcomando debe usar un literal $(para que el icomando se aplique a la última línea del archivo)Y $NAMEpara que la variable se interpola. Para hacer esto, necesita "escapar" del literal $con una barra invertida para que el shell no interprete $ien 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 -iopción, para sedno 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

información relacionada