所以在,window下开了记事本来建立文本文件
但是,拖到linux下,并没有发现^M,这怎么办呢
于是,用了另外一个编辑器,edit,结果怎么样呢?
还是没有出现^M,想到^M的产生实际上是因为dos和
linux 采用了不同的换行导致的,linux是用的\n
而dos是用的\n\r,于是就产生了一个好想法,这
个问题,就可以写个简单的程序来解决了,呵呵
下面是我的C语言代码,dosedit
- #include<stdio.h>
-
int main(){
-
char line[100];
-
FILE *fp = fopen("a.dos","w");
-
do{
-
printf("Please Enter a line(\"BYE\" to end input):");
-
gets(line);
-
fprintf(fp,"%s\r\n",line);
-
}while(!(line[0] == 'B' && line[1] == 'Y' && line[2] == 'E'));
-
fclose(fp);
-
return 0;
-
- }
运行这个程序dosedit后,就会在目录下出现一个a.dos的文件,
这样,我们就有了a.dos这个文件,用记事本打开看看,发现不了什么区别,
然后用vim打开看看,打开一看,耶
出现了,^M出现了,也就是说^M代表\r,呵呵
下面是perl版的程序dosedit.pl
- #!/usr/bin/perl
-
open WH,">a.dos" or die "$!";
-
my $line = "";
-
do{
-
print "Please enter a line(\"BYE\" to end):";
-
$line = <STDIN>;
-
chomp $line;
-
print WH $line."\r\n";
-
}while($line ne 'BYE')
- close WH or die "$!";
在windows下运行的时候,是会出现^M的,但是放到linux下跑的时候白搭,
猜测可能是linux下\r的解释就是回车,然后,这样我们的材料就全了,然后,我就要
开始我的主要目的了,我们可以用dos2unix来把\r去掉,也可以用sed
顺便说说vi的几个比较方便的命令,:sp file 打开文件split screen
切换使用Ctrl-w j|k,就说这么多废话吧,呵呵
我们可以使用dos2unix a.dos
还可以使用sed -e 's/^M//g' a.dos > a.unix
这都不是重点,我要说的是用perl 怎么达到这个效果呢?
- perl -ne 's/^M//g; print;' a.dos >a.unix
这样,我们就把^M去掉了,就可以进行下一步的处理了,呵呵
如图所示: