一行命令搞定/usr/bin/perl^M: bad interpreter
2014-05-04 00:00
253 查看
在*nix系统下使用Perl脚本有时会遇到如下错误:
最常见的原因是因为该脚本在windows系统下进行了编辑。windows系统下的换行符是\r\n,而unix下面是只有\n的。如果要解决这个问题,只要去掉\r即可。
第一种解决方案是用sed(假设出问题的脚本名叫filename):
这种解决方案适合简单的ASCII文件形式。如果情况再复杂些,比方说filename是Unicode文件,可能会引入了Unicode中某些新的换行符;另外有时候\r和\n在某些系统上对应的字符编码并不一致。如果再碰上垂直制表符 0x0B 和进纸符 0x0C 就更麻烦了。好在Perl提供了另一种解决方案:
这里用到了从Perl 5.10开始引入的\R这个字符组,用来匹配各种换行符,我们只要方便地将其替换为\n就可以了。同时也没有必要用脚本文件来实现,只需要在shell里执行这样一行命令就行了。其中-p表示逐行对filename进行操作,-i表示原地操作,覆盖原始文件,-e则是表示执行后面的语句。
/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
这里用到了从Perl 5.10开始引入的\R这个字符组,用来匹配各种换行符,我们只要方便地将其替换为\n就可以了。同时也没有必要用脚本文件来实现,只需要在shell里执行这样一行命令就行了。其中-p表示逐行对filename进行操作,-i表示原地操作,覆盖原始文件,-e则是表示执行后面的语句。
相关文章推荐
- Perl模块编写说明
- perl如何避免脚本在windows中闪一下就关闭
- linux下使用perl获取本机ip的几种方法介绍
- perl 控制结构 条件控制 if while
- 什么是Perl?编程语言Perl详细介绍
- perl 基本语法介绍
- perl 模式匹配参数详解
- PERL脚本 学习笔记
- perl 列表和数组变量详解
- 探索Perl的世界(更新到40集)-Perl视频教程
- perl 文件读写详细说明
- perl中5个常见错误
- Perl ASCII 字符判断
- perl 学习资料整理篇第1/4页
- Perl Mysql数据库操作实现代码
- perl qw以空格为分隔符问题的解决方法
- Perl 获取shell命令的执行结果
- perl 中文处理技巧
- 在Perl中使用Getopt::Long模块来接收用户命令行参数
- 冒充su ,perl写的su.pl盗取root密码