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

Michael_DD發表於2015-04-29
一行命令搞定/usr/bin/perl^M: bad interpreter


在*nix系統下使用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


這裡用到了從Perl 5.10開始引入的\R這個字元組,用來匹配各種換行符,我們只要方便地將其替換為\n就可以了。
同時也沒有必要用指令碼檔案來實現,只需要在shell裡執行這樣一行命令就行了。
其中-p表示逐行對filename進行操作,-i表示原地操作,覆蓋原始檔案,-e則是表示執行後面的語句。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29500582/viewspace-1610793/,如需轉載,請註明出處,否則將追究法律責任。

相關文章