1

ファイル内の文字列を検索および置換するために、次のようなsedコマンドがあります。

sed -i -e 's/`db1`./`db2`./g' result/files1.sql

次のファイル内の db1 を db2 に置き換えるために正常に動作しています: result/files1.sql

ただし、bash と変数形式に変更すると機能しません。

sed -i -e "s/`${mydbname}`./`${mydbname2}`./g" "${mypath}"

次のようなエラーが発生します。

./mycoolscript: line 241: db1: command not found
./mycoolscript: line 241: db2: command not found

どんな解決策も素晴らしいでしょう。

4

4 に答える 4

3

までの場合is something you need to replace, you will need to escape。ここにあります

sed -i -e "s/\`${mydbname}\`./\`${mydbname2}\`./g" "${mypath}"
于 2013-10-17T06:52:33.800 に答える
2

バックティック文字をエスケープする

sed -i -e "s/\`${mydbname}\`./\`${mydbname2}\`./g" "${mypath}"

Bash は、バッククォート内の部分をコマンドとして扱い、最初にそれを実行します。

于 2013-10-17T06:46:21.063 に答える
0

これを試して

sed -i -e "s/${mydbname}/${mydbname2}/g" "${mypath}"
于 2013-10-17T08:05:53.920 に答える
0

リテラルに一重引用符を使用し、変数/エスケープ シーケンスの周りにのみ二重引用符を使用する方法がもう 1 つあります。

sed -i -e 's/`'"${mydbname}"'`./`'"${mydbname2}"'`./g' "${mypath}"

一重引用符があるため、特殊文字をエスケープする必要はありません。

特殊文字をエスケープすることと、一重引用符と二重引用符を組み合わせて使用​​することのトレードオフは、特殊文字の数と変数の数によって異なります。

エスケープが必要な文字が多すぎて変数の数が少ない場合は、一重引用符と二重引用符の組み合わせをお勧めします。

于 2013-10-17T08:41:42.477 に答える