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

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

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

sed -i 的/细绳//一些/目录/g' 文件.txt

我找不到关于如何/some/directory不破坏sed语法的直接答案。

答案1

sed允许多种语法分隔符,/但仅是最常用的一种。

你也可以说

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

其中,now 具有通常由 执行的功能/,从而使后者摆脱了其特殊含义。

但请注意(正如 @Jeff Schaller 所指出的),现在,不得出现在文件或目录名称中 - 并且它是文件名的有效字符! 这个答案很好地概述了如何在应用于sed具有特殊字符的字符串时继续操作。

答案2

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

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

sed -e 's/<string>/<some\/directory>/g' file.txt

\斜线前面的符号sed表示它只是一个斜线,而不是分隔符。

答案3

#@AdminBee到目前为止我只看到用作分隔符,猜测它在模式中出现的频率比逗号少:

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

相关内容