Sed
無法使用 sed 替換路徑
如何使用 sed 命令將路徑替換為文件中的另一個路徑,並且當它用作腳本中的變數時,它正在工作。
sed -i "s/"system_filter = /etc/define_filter_file"/"system_filter = /usr/local/etc/file_regex"/g" /etc/exi.conf.bak
您需要轉義提供的路徑中的所有斜線,並將開始和終止引號更改為單引號。
sed -i 's/"system_filter = \/etc\/define_filter_file"/"system_filter = \/usr\/local\/etc\/file_regex"/g' /etc/exi.conf.bak
該命令表示為:
sed -i 's/path1/path2/g'
Path1 和 path2 不能清楚地包含
/
,因為這會與整個表達式混淆。
來自 GNU sed 的 infotex 手冊(請參閱 參考資料
info sed
):
s
(作為替代)命令 的語法是s/REGEXP/REPLACEMENT/FLAGS
. 這些/
字元可以被 任何給定命令中的任何其他單個字元1統一**替換。**僅當字元前面有字元時,字元(或任何其他字元)才能出現在 REGEXP 或 REPLACEMENT 中 。s``/``\
即
|
用作 REGEXP 和替換之間的分隔符,sed 命令變為:sed -i 's|"system_filter = /etc/define_filter_file"|"system_filter = /usr/local/etc/file_regex"|g' /etc/exi.conf.bak
或簡而言之:
sed s|/some/path|/alternate/path/|
這比替代方案更容易,轉義大量正斜杠:
sed s/\/some\/path/\/alternate\/path\//
- (
sed
OSX 上的手冊頁明確排除了上述*“任何其他單個字元”*\
的限定條件中的反斜杠和換行符)