| View Comments ]

如上图,我是通过Http将文件下载到硬盘上的,但在远端服务器上并没有 ^M出现,可是下载之后就成了这样,导致脚本无法运行
上网Google搜索了一下只发现一个结果:

来自Thunder Bird linux文件中的^M问题


原文:
当在windows和linux之间进行文件交互时,常常会发生linux在文件的每行结尾都加上一个^M,就是linux下的换行符,非打印字符,但占有一个单位的长度,所以在处理字符串时要注意,可以用perl中的正则表表达式将其替换掉,但^M输入时不能直接输入,要通过Ctrl+V然后CTRL+M来输入:
while()
{
   chomp;
   s/^M$//;
}



明天上班之后试试看



今日公司论坛上有人提供更简便的方法,命令如下:
find . -type f \! -exec dos2unix {} \;

仔细研究了一下
造成这个问题的主要原因是系统底层语言环境以及传输工具造成的

在用CVS更新时如果不选中use Unix line endings就会出现这样的情况

昨晚上将Ubuntu的系统语言改为中文之后
原先文件中出现的 ^M都不见了

而以前使用英文编码然后使用Http将文件下载之后就会在每一行之后附加

然后又将命令精简了一点点

find . -type f -exec dos2unix {} \;

dos2unix : converts the line endings of text files from DOS style (0x0d 0x0a) to UNIX style (0x0a)

命令中的一对花括号{}代表被评测的文件名。而最后的 \;的代表满足条件退出

原先脚本中的 ! 不知有何意思?

去掉之后发现达到同样的效果,而且无需 \ 也一样可以达到目的

附:Linux中的几个匹配 特殊字符

^(行开始指示符)
$(行结束指示符)
.(任意字符指示符)
\>(字结束指示符)
\<(字开始指示符) *(0个或多个指示符) [](定义字符类,也即匹配单个字符) 在定义字符类中,有两个特殊的字符:脱字符(^)和连字符(-)

版权声明:Copyright © Life is being……is licensed under a Creative Commons License....


查看邮件也能赚钱 Iphone3G B 005 468x60


0 评论

发表评论