
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