Mac系统下如何用sed在Python脚本开头添加shebang且保留原有内容?
Mac下用sed给Python脚本添加shebang的正确方法
你的问题出在误用了替换命令,直接覆盖了第一行内容。要保留原有代码并在脚本开头添加shebang,需要使用插入命令而非替换命令,具体解决方法如下:
正确命令
在Mac的BSD环境下,执行这条sed命令即可实现需求:
sed -i '.bak' '1i\ #!/usr/bin/env python2\ ' file.py
关键说明
-i '.bak':执行时会自动生成原文件的备份file.py.bak,避免误操作丢失数据;如果不需要备份,可写成-i ''(注意空引号不能省略)。1i\:代表在第1行之前插入新内容,Mac版sed要求i命令后必须紧跟反斜杠和换行,这是它和GNU sed的语法差异。- 中间的
#!/usr/bin/env python2就是要添加的shebang,末尾的反斜杠是语法要求,确保命令正确执行。
原命令丢失内容的原因
你之前使用的s替换命令:
sed -i '.bak' '1 s|^.*$|#!/usr/bin/env python2|g' file.py
作用是把第1行的所有内容(即import os)完全替换成shebang,自然会丢失原有第一行的代码。
简化写法(适合bash/zsh终端)
如果觉得换行的写法繁琐,也可以用bash的ANSI-C转义字符串简化命令:
sed -i '.bak' $'1i\\\n#!/usr/bin/env python2\n' file.py
内容的提问来源于stack exchange,提问作者user9328894
相关产品推荐
相关产品推荐

