使用 sed 将字符串替换为包含目录名称的字符串(即斜杠“/”)

Jus*_*att 5 sed text-processing

我知道以前有人问过这个问题,但我无法理解我找到的答案。基本上我想用

sed -i 's/ string / /some/directory /g' file.txt

我找不到关于如何使语法/some/directory不分解的直接答案sed

Adm*_*Bee 8

sed允许多个语法定界符,/仅是最常用的一个。

你也可以说

sed -i 's,<string>,<some/directory>,g' file.txt
Run Code Online (Sandbox Code Playgroud)

其中,now 具有通常由 执行的功能/,从而将后者从其特殊含义中解放出来。

但是请注意(正如@Jeff Schaller 指出的那样),现在,不能出现在文件名或目录名中 -它是文件名的有效字符! 这个答案很好地概述了在应用于sed具有特殊字符的字符串时如何进行。


小智 6

当您可以找到未出现在字符串中的分隔符时,用已知不会出现在搜索或替换字符串中的分隔符替换分隔符是一个不错的选择。我倾向于使用加号,而不是逗号,但这更像是一个习惯问题。

但是,如果您找不到未出现在字符串中的分隔符,则总是有反斜杠转义:

sed -e 's/<string>/<some\/directory>/g' file.txt
Run Code Online (Sandbox Code Playgroud)

\在斜线前面让sed知道,这只是一个斜杠,而不是分隔符。