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

时间:2015-02-27 14:00:58

标签: linux bash shell sed

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

要放置的行:

   source 'http://rubygems.org'

我的剧本:

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

无法识别单引号。

我得到错误:" sed:-e表达式#1,字符23:未知的选项,以及#s;'"

3 个答案:

答案 0 :(得分:2)

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

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

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

使用@而不是通常的斜杠分隔符在shell中运行以下命令。

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

答案 1 :(得分:1)

最简单的解决方案是使用类似的东西。

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

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

答案 2 :(得分:0)

sed接受不同的分隔符:

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

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