sed在替代命令中抛出'坏旗'

时间:2013-07-08 19:51:44

标签: macos command-line sed

我想运行一个简单的命令,将绝对路径替换为CSS文件中的相对路径,如下所示:

sed -i 's/\/fonts/../fonts/' /Users/sergeybasharov/WebstormProjects/snap/compiled/Content/stylesheets/style.css

它抛出了这个

sed: 1: "/Users/sergeybasharov/W ...": bad flag in substitute command: 'b'

这个简单的脚本有什么问题?

3 个答案:

答案 0 :(得分:47)

在您的命令中s/\/fonts/../fonts/被视为-i选项的参数(用于备份文件的后缀),并且filename参数被视为编辑命令。

您需要指定禁用备份文件创建:

sed -i '' ...

在你的例子中:

sed -i '' 's/\/fonts/../fonts/' /Users/sergeybasharov/WebstormProjects/snap/compiled/Content/stylesheets/style.css

计算机是愚蠢的,他们不会通过上下文来解决问题,所以他们无法分辨出以s/开头的东西显然是编辑命令,而不是后缀。< / p>

答案 1 :(得分:11)

sed -i 's/\/fonts/../fonts/'不是有效的sed命令,请尝试sed -i 's#/fonts#../fonts#'

答案 2 :(得分:11)

我遇到了类似的问题。您可以在Mac中安装GNU版本的sed,名为gsed,并使用标准Linux语法进行使用。

为此,通过运行sudo port install gsed,使用端口安装gsed(如果你没有,请在http://www.macports.org/获取)。然后,您可以运行gsed -i的/ old_pattern / new_pattern / g'*