问题解决: 解释器错误: 没有那个文件或目录

执行一个我写的 perl 脚本,命令行报错:

/usr/bin/perl^M: 解释器错误: 没有那个文件或目录

分析: UNIX和Linux使用“ ”换行,而Windows用“ ”(不是 ,已验证). 推测脚本文件在windows下编辑过。用 sed 命令把每行末尾的 去掉。

解决: sed -i s/ $// filename

解释一下,-i 表示 edit files in place,直接修改原来的文本 s/a/b/ 表示把 a 替换成 b $表示“结束位置” 所以上面命令的意思是:如果一行以 结尾,就把 替换为空,也就是去掉它。

有人问,不是以 结尾吗?

使用 standard sed,您将看不到换行符。这是因为 sed 逐行读取,因此在 sed 模式空间中,当前行文本的末尾没有换行符。换句话说,sed 读取以换行符分隔的数据,并且分隔符不是 sed 脚本所见内容的一部分。

所以, 作为分隔符了,所以每行的末尾就是 。


参考资料

经验分享 程序员 微信小程序 职场和发展