
我需要將變數寫入 docker 容器中第 31 行的檔案中。
我的命令是:
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 指令必須用雙引號 "" 引用,實習參數必須用單引號 '
感謝所有的夥伴