Bash
Bash 為 sed 轉換路徑名,以便它們轉義
我的腳本有問題。它旨在更改名為的文件中的值
%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
作為分隔符。