将变量写入容器文件的某一行

将变量写入容器文件的某一行

我需要将变量写入 docker 容器中第 31 行的文件中。我使用 bash 脚本

我的命令是:

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

它产生这个错误:

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

我的文件中没有添加任何内容...

你能帮我吗?

答案1

我对 docker 容器一无所知,但如果您只想在某一行之前插入变量的内容,则可以使用以下 GNU sed 命令。

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

为了安全起见,上面的命令创建了扩展名为 的输入文件的备份.bk

答案2

感谢您的回答。它不好用。

事实上它插入一个空行,

如果我尝试用

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

有用

如果我尝试用

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

我刚刚得到一个新的空行...

答案3

哦等等,这只是一个“和”的问题

这是正确的语法

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

sed 命令必须用双引号 "" 引用,实习参数必须用单引号 '

感谢所有的伙伴

相关内容