首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无效命令代码。-使用sed替换内联字符

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

Unix & Linux用户
提问于 2021-08-05 03:02:29
回答 1查看 11.4K关注 0票数 5

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

代码语言:javascript
复制
Invalid command code .

当我尝试

代码语言:javascript
复制
sed -i 's/\([^.]*\).css/\1.min.css/g' ./bobby/templates/layout.html;

我有一个很大的预感--是./bobby/templates/layout.html抛出了错误,但我不知道如何将它重新格式化为一个有效的文件路径。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-08-05 06:11:42

看起来,您的sed版本需要-i选项的后缀参数。这意味着它可能在一台Mac或FreeBSD机器上。

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

尝试:

代码语言:javascript
复制
sed -i .bak 's/\([^.]*\)\.css/\1.min.css/g' ./bobby/templates/layout.html

我在S/命令的LHS中添加了一个反斜杠来转义. (否则它将匹配任何字符,而不仅仅是文字.),并在文件名末尾去掉; --只有在同一行中有多个命令时才需要这样做。

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

或者,您可以使用perl来完成这一任务。例如:

代码语言:javascript
复制
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的内容,因此它只在文件名前面加上斜杠字符时才会更改文件名。如果不看到实际输入文件的样子,就不可能有比这更具体的内容了。

票数 7
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/663369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档