命令代码无效。 - 使用sed替换内联字符

命令代码无效。 - 使用sed替换内联字符

我对使用 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,以便它仅更改文件名(如果文件名前面紧跟着斜杠字符)。如果不查看实际输入文件的样子,就不可能比这更具体。

相关内容