我对bash / shell脚本非常陌生,所以如果这真的很简单,请原谅我。我试图替换嵌套在目录中的内联文件,但是我收到了
Invalid command code .当我尝试
sed -i 's/\([^.]*\).css/\1.min.css/g' ./bobby/templates/layout.html;我有一个很大的预感--是./bobby/templates/layout.html抛出了错误,但我不知道如何将它重新格式化为一个有效的文件路径。
发布于 2021-08-05 06:11:42
看起来,您的sed版本需要-i选项的后缀参数。这意味着它可能在一台Mac或FreeBSD机器上。
然后sed将sed脚本解释为后缀,文件名解释为sed script....hence错误消息Invalid command code .,因为这是文件名的第一个字符。
尝试:
sed -i .bak 's/\([^.]*\)\.css/\1.min.css/g' ./bobby/templates/layout.html我在S/命令的LHS中添加了一个反斜杠来转义. (否则它将匹配任何字符,而不仅仅是文字.),并在文件名末尾去掉; --只有在同一行中有多个命令时才需要这样做。
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的内容,因此它只在文件名前面加上斜杠字符时才会更改文件名。如果不看到实际输入文件的样子,就不可能有比这更具体的内容了。
https://unix.stackexchange.com/questions/663369
复制相似问题