如何在 shell 脚本中转义冒号和双斜线?

How to escape colon and double slash in shell script?

我正在编写 shell 脚本来替换具有 URI.I 的文件中的一行,我在使用 URI 时遇到错误。

要放置的行:

   source 'http://rubygems.org'

我的脚本:

   #sed -i '1s/.*/  source 'https://rubygems.org' /' /Gemfile

无法识别单引号。

我得到错误:"sed: -e expression #1, char 23: unknown option to `s'"

您可以在 sed 命令中使用备用分隔符。

例如,几年前我有一个必须交换 URL 的 sed 行,我使用了 @at 符号。

例如,使用以下内容创建一个文本文件 'file.txt': 我有一个来自加州的 unix 操作系统

运行 在您的 shell 中使用 @ 而不是通常的斜线分隔符。

$ sed 's@unix@linux@' file.txt
I have a linux operating system from California

最简单的解决方案是改用类似这样的方法。

sed -i "1s,.*,  source 'https://rubygems.org' ," /Gemfile

sed 脚本周围的双引号允许内部单引号和 s,,, 而不是 s///(因为您几乎可以使用任何单个字符作为所需的分隔符)。

sed 接受不同的分隔符:

sed -i '1s|.*|  source "https://rubygems.org" |' /Gemfile

在单引号内你也可以使用双引号。