Bash 转换 sed 的路径名,以便它们转义

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)


Wil*_*ill 5

这里的其他答案已经很好了,但我只是想补充一点,除了/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作为分隔符。