Escribir una variable en el archivo de un contenedor en una línea determinada

Escribir una variable en el archivo de un contenedor en una línea determinada

Necesito escribir una variable en un archivo que está en un contenedor acoplable en la línea 31. Utilizo un script bash

mi comando es:

txt=" 
log-bin
server_id=1"
docker exec $container sed -i "31i\
$txt /etc/mysql/my.cnf

Produce este error:

sed: -e expression #1, char 8: extra characters after command

y no se agrega nada en mi archivo...

¿Puede usted ayudar?

Respuesta1

No sé nada sobre contenedores acoplables, pero si lo único que quieres es insertar el contenido de una variable antes de una determinada línea, puedes usar el siguiente comando GNU sed.

VAR="$txt" sed -i.bk '31{h;s:.*:printf "%s" "$VAR":e;G}' /etc/mysql/my.cnf

Para estar seguro, el comando anterior crea una copia de seguridad del archivo de entrada con extensión .bk.

Respuesta2

Gracias por tu respuesta. No funciona bien.

De hecho, inserta una línea vacía,

si lo intento con

VAR="$txt" 
sed -i.bk '31{h;s:.*:printf "%s" "hello world":e;G}' /etc/mysql/my.cnf

funciona

si lo intento con

VAR="$txt" 
sed -i.bk '31{h;s:.*:printf "%s" "$VAR":e;G}' /etc/mysql/my.cnf

Acabo de recibir una nueva línea vacía...

Respuesta3

Oh, espera, es solo cuestión de " y '

Esta es la sintaxis correcta

VAR="$txt"
docker exec  $container sed -i.bk "31{h;s:.*:printf '%s' '$VAR':e;G}" $path

El comando sed tenía que estar entre comillas dobles "" y los argumentos internos con comillas simples '

gracias por todo amigo

información relacionada