我需要将变量写入 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 命令必须用双引号 "" 引用,实习参数必须用单引号 '
感谢所有的伙伴