如何在 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
在单引号内你也可以使用双引号。
我正在编写 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
在单引号内你也可以使用双引号。