Bash

Bash 為 sed 轉換路徑名,以便它們轉義

  • October 1, 2018

我的腳本有問題。它旨在更改名為的文件中的值%DIR%,使其成為路徑名。問題是目錄名稱中的斜杠使 sed 不安,所以我得到了奇怪的錯誤。我需要將路徑名中的斜杠轉換為轉義斜杠。

所以/var/www會變成\/var\/www

但我不知道該怎麼做。

目前腳本執行 sed 與此:

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

既然你說你正在使用 Bash,你可以使用參數擴展來插入斜杠:

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

這分解為

  • 代替directory
  • 替換每個 ( //)
  • 斜線 ( \/)
  • 與 ( /)
  • 反斜杠+斜杠 ( \\/)。

將其放入您的 sed 命令中會給出:

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

這裡的其他答案已經很好了,但我只想補充一點,除了/with之外,您還可以使用不同的分隔符sed。每當我需要對包含以下內容的輸入進行操作時,我都會這樣做/

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

甚至:

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

都一樣sed;它將使用您在之後指定的任何字元s作為分隔符。

引用自:https://unix.stackexchange.com/questions/265267