Bash は sed のパス名をエスケープするように変換します。

Bash は sed のパス名をエスケープするように変換します。

私のスクリプトに問題があります。その目的は、呼び出されたファイルの値をパス名に%DIR%なるように変更することです。問題は、ディレクトリ名のスラッシュがsedを台無しにして奇妙なエラーが発生することです。パス名のスラッシュをエスケープスラッシュに変換する必要があります。

だから/var/wwwそれはなります\/var\/www

しかし、どうすればいいのかわかりません。

スクリプトがsedを実行する現在の方法は次のとおりです。

sed -i "s/%DIR%/$directory/g" "$config"

ベストアンサー1

Bashを使用すると言ったので、次のことができます。パラメータ拡張スラッシュ挿入:

$ directory=/var/www
$ echo "${directory//\//\\/}"
\/var\/www

これは次のように分類されます。

  • 変えるdirectory
  • それぞれ交換(//
  • スラッシュ( \/)
  • そして(/
  • バックスラッシュ+スラッシュ( \\/)。

これをsedコマンドに入れると、次のようになります。

sed -i "s/%DIR%/${directory//\//\\/}/g" "$config"

おすすめ記事