コンテナのファイルの特定の行に変数を書き込む

コンテナのファイルの特定の行に変数を書き込む

31行目のDockerコンテナ内のファイルに変数を書き込む必要があります。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コマンドは二重引用符「""」で囲み、内部引数は一重引用符「'」で囲む必要があります。

ありがとう

関連情報