我对使用 bash / shell 脚本相当陌生,所以如果这真的很简单,请原谅我。我正在尝试替换嵌套在目录中的内联文件,但是我收到
Invalid command code .
当我尝试时
sed -i 's/\([^.]*\).css/\1.min.css/g' ./bobby/templates/layout.html;
我有一个很大的预感,那就是./bobby/templates/layout.html
抛出错误,但我不确定如何将其重新格式化为有效的文件路径。
答案1
您的版本似乎sed
需要该选项的后缀参数-i
。这意味着它可能在 Mac 或 FreeBSD 机器上。
sed
然后将您的 sed 脚本解释为后缀,将文件名解释为 sed 脚本......因此出现错误消息Invalid command code .
,因为这是文件名的第一个字符。
尝试:
sed -i .bak 's/\([^.]*\)\.css/\1.min.css/g' ./bobby/templates/layout.html
我添加了一个反斜杠来转义.
(否则它将匹配任何字符,而不仅仅是文字.
),并删除了;
文件名末尾的 - 仅当同一行中有多个命令时才需要。
sed 脚本将对文件进行就地编辑,并进行备份.../layout.html.bak
或者,您可以使用 perl 来完成。例如
perl -i -p -e 's/([^.]*)\.css/$1.min.css/g' ./bobby/templates/layout.html
顺便说一句,sed 和 perl 版本中使用的正则表达式可能会比您预期的变化更多,因为文件中不太可能只有filename.css
一行.html
。我会先在没有选项的情况下测试它-i
。
您可能想要更像 的东西s:(/[^.]*)\.css:$1.min.css:g
,以便它仅更改文件名(如果文件名前面紧跟着斜杠字符)。如果不查看实际输入文件的样子,就不可能比这更具体。