52

我想运行一个简单的命令,将绝对路径替换为 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'

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

4

3 回答 3

78

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

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

sed -i '' ...

在您的示例中:

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

计算机是愚蠢的,它们不会根据上下文来判断事物,因此它们无法判断以开头的s/内容显然是编辑命令,而不是后缀。

于 2013-07-08T20:13:00.927 回答
32

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

于 2013-07-08T20:02:44.460 回答
20

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

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

于 2013-12-29T17:07:54.307 回答