Joh*_*ate 3 bash sed string quoting escape-characters
我的脚本有问题。它旨在更改名为的文件中的值%DIR%,使其成为路径名。问题是目录名称中的斜杠打乱了 sed,所以我得到了奇怪的错误。我需要将路径名中的斜杠转换为转义斜杠。
所以/var/www会变成\/var\/www
但我不知道如何做到这一点。
目前,脚本运行 sed 如下:
sed -i "s/%DIR%/$directory/g" "$config"
Run Code Online (Sandbox Code Playgroud)
Tob*_*ght 12
既然你说你在使用 Bash,你可以使用Parameter Expansion来插入斜杠:
$ directory=/var/www
$ echo "${directory//\//\\/}"
\/var\/www
Run Code Online (Sandbox Code Playgroud)
这分解为
directory//)\/)/)\\/)。将其放入您的 sed 命令中会给出:
sed -i "s/%DIR%/${directory//\//\\/}/g" "$config"
Run Code Online (Sandbox Code Playgroud)
这里的其他答案已经很好了,但我只是想补充一点,除了/with之外,您还可以使用不同的分隔符sed。每当我需要对包含以下内容的输入进行操作时,我都会这样做/:
sed -i "s@%DIR%@${directory}@g" "$config"
Run Code Online (Sandbox Code Playgroud)
甚至:
sed -i "s#%DIR%#${directory}#g" "$config"
Run Code Online (Sandbox Code Playgroud)
都一样sed;它将使用您在 后面指定的任何字符s作为分隔符。