一行命令搞定/usr/bin/perl^M: bad interpreter

在linux系统下使用Perl脚本有时会遇到如下错误:

/usr/bin/perl^M: bad interpreter: No such file or directory

最常见的原因是因为该脚本在windows系统下进行了编辑。windows系统下的换行符是/r/n,而unix下面是只有/n的。如果要解决这个问题,只要去掉/r即可。

第一种解决方案是用sed(假设出问题的脚本名叫filename):

sed -i 's//r$//' filename

这种解决方案适合简单的ASCII文件形式。如果情况再复杂些,比方说filename是Unicode文件,可能会引入了Unicode中某些新的换行符;另外有时候/r和/n在某些系统上对应的字符编码并不一致。如果再碰上垂直制表符 0x0B 和进纸符 0x0C 就更麻烦了。好在Perl提供了另一种解决方案:

perl -p -i -e "s//R//n/g" filename -p -i -e "s//R//n/g" filename

这里用到了从Perl 5.10开始引入的/R这个字符组,用来匹配各种换行符,我们只要方便地将其替换为/n就可以了。同时也没有必要用脚本文件来实现,只需要在shell里执行这样一行命令就行了。其中-p表示逐行对filename进行操作,-i表示原地操作,覆盖原始文件,-e则是表示执行后面的语句。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你是我的天晴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值