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

ira*_*cka 7 bash sed text-processing

我对使用 bash / shell 脚本相当陌生,所以如果这真的很简单,请原谅我。我正在尝试替换嵌套在目录中的内联文件,但是我收到

Invalid command code .
Run Code Online (Sandbox Code Playgroud)

当我尝试时

sed -i 's/\([^.]*\).css/\1.min.css/g' ./bobby/templates/layout.html;
Run Code Online (Sandbox Code Playgroud)

我有一个很大的预感,那就是./bobby/templates/layout.html抛出错误,但我不确定如何将其重新格式化为有效的文件路径。

cas*_*cas 13

您的版本似乎sed需要该选项的后缀参数-i。这意味着它可能在 Mac 或 FreeBSD 机器上。

sed然后将您的 sed 脚本解释为后缀,将文件名解释为 sed 脚本......因此出现错误消息Invalid command code .,因为这是文件名的第一个字符。

尝试:

sed -i .bak 's/\([^.]*\)\.css/\1.min.css/g' ./bobby/templates/layout.html
Run Code Online (Sandbox Code Playgroud)

我添加了一个反斜杠来转义.s/// 命令的 LHS 中的 the (否则它将匹配任何字符,而不仅仅是文字.),并删除了;文件名末尾的 the - 这仅是需要的如果同一行中有多个命令。

sed 脚本将对文件进行就地编辑,并进行备份.../layout.html.bak

或者,您可以使用 perl 来完成。例如

perl -i -p -e 's/([^.]*)\.css/$1.min.css/g' ./bobby/templates/layout.html
Run Code Online (Sandbox Code Playgroud)

顺便说一句,sed 和 perl 版本中使用的正则表达式可能会比您预期的变化更多,因为文件中不太可能只有filename.css一行.html。我会先在没有选项的情况下测试它-i

您可能想要更像 的东西s:(/[^.]*)\.css:$1.min.css:g,以便它仅更改文件名(如果文件名前面紧跟着斜杠字符)。如果不查看实际输入文件的样子,就不可能比这更具体。

  • 我很欣赏彻底的回答。是的,我正在使用 Mac。 (3认同)