我想运行一个简单的命令,将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'
这个简单脚本可能有什么问题?
我想运行一个简单的命令,将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'
这个简单脚本可能有什么问题?
s/\/fonts/../fonts/
被视为-i
选项的参数(用于备份文件的后缀),而文件名参数则被视为编辑命令。你需要指定禁用备份文件的创建:sed -i '' ...
sed -i '' 's/\/fonts/../fonts/' /Users/sergeybasharov/WebstormProjects/snap/compiled/Content/stylesheets/style.css
电脑很“笨”,它们不会通过上下文理解事情,所以它们无法判断以s/
开头的内容显然是编辑命令而非后缀。
sed -i 's/\/fonts/../fonts/'
不是一个有效的sed命令,请尝试 sed -i 's#/fonts#../fonts#'
我遇到了类似的问题。您可以在 Mac 上安装 GNU 版本的 sed,称为 gsed,并使用标准 Linux 语法。
为此,请使用端口安装 gsed(如果没有,请到 http://www.macports.org/ 获取),方法是运行 sudo port install gsed。然后,您可以运行:
gsed -i 's/old_pattern/new_pattern/g' *
brew install gnu-sed
。 - richgsed
很顺利。我在 Mac 上使用 brew install gsed
安装了 gsed。 - Bhaskar Reddy在 sed 中你可以使用任何字符来分隔字符串,在我的情况下,由于一个字符串中包含了 /,所以出现了错误,因此我需要用 | 替换 sed 分隔符;希望这能帮助其他人。
STRING1="something/somethingelse"
STRING2="clean"
sed -i '' "s|${STRING1}|${STRING2}|g" FILE
b
,这可能不是你实际输入的内容。请粘贴实际脚本。 - Barmar-e
,或者在开头缺少了s/\fonts
命令。它把文件名当作 sed 指令来处理。 - Barmarman
手册。上面写着,在-i后面应该使用用于创建备份文件的扩展名。如果提供空字符串,则不会创建备份。因此,我将其设置为-i''
,它可以正常工作。 - Sergei Basharov