Sed给出“sed:1:”tsunit.js“:undefined label'sunit.js'”

时间:2014-04-14 22:57:04

标签: bash sed makefile

短暂的任务,为什么这一行

sed -i '1s/^/#!\/usr\/bin\/env node\n/' tsunit.js;\

给我这个错误

sed: 1: "tsunit.js": undefined label 'sunit.js'
如果相关,请在Makefile中

我在Mac上。

2 个答案:

答案 0 :(得分:5)

根据the Apple man page for sed-i选项采用必需参数指定备份文件的文件扩展名。因此,假设您使用的是Mac或类似产品,sed认为您希望'1s/^/#!\/usr\/bin\/env node\n/'成为备份的文件扩展名。然后它将tsunit.js解释为sed命令。前导t告诉sed转移到标签sunit.js,当然,标签不存在。因此错误信息。

解决方案是:

sed -i '.bak' '1s/^/#!\/usr\/bin\/env node\n/' tsunit.js

或者,如果你真的不想要备份:

sed -i '' '1s/^/#!\/usr\/bin\/env node\n/' tsunit.js

答案 1 :(得分:1)

此外,它看起来像是在插入一条线。 sed的命令多于s

sed -i "" '1i\
#!/usr/bin/env node' tsunit.js