在查找和替换字符串中使用斜杠查找并替换为 sed

LOK*_*ESH 14 sed quoting

我想在文件改变/var/www/home/lokesh/www使用sed命令

sed -i 's///var//www///home//lokesh//www/g' lks.php
Run Code Online (Sandbox Code Playgroud)

但这给错误

sed: couldn't open file ww///home//lokesh//www/g: No such file or directory
Run Code Online (Sandbox Code Playgroud)

Tig*_*ger 38

不确定您是否知道,但sed有一个很棒的功能,您无需使用 a/作为分隔符。

所以,你的例子可以写成:

sed -i 's#/var/www#/home/lokesh/www#g' lks.php
Run Code Online (Sandbox Code Playgroud)

它不需要是 a #,它可以是任何单个字符。例如,使用 a3作为分隔符:

echo "foo" | sed 's3foo3bar3g'
bar
Run Code Online (Sandbox Code Playgroud)


roa*_*ima 6

正如其他人指出的那样,您可以为分隔符使用不同的字符,如下所示:

sed -i 's!pattern!replacement!g' /path/to/file
Run Code Online (Sandbox Code Playgroud)

但是,如果没有方便的字符来代替/分隔符,您也可以转义任何嵌入的分隔符,patternreplacement在每个字符前加上反斜杠\。这是一个/用作分隔符的示例,它替换/some/path../some/replacement

sed -i 's/\/some\/path/..\/some\/replacement/g'
Run Code Online (Sandbox Code Playgroud)

但是,人类更难阅读,因此通常如果可能的话,最好为分隔符使用不同的字符,如下所示:

sed -i 's!/some/path!../some/replacement!g'
Run Code Online (Sandbox Code Playgroud)