100分讨论在unix上用的去掉windows文件中的换行符(0x0D)的shell或c程序!
问题描述:对于换行,window下用回车换行(0A0D)来表示,unix下是回车(0A)来表示。这样,将window上的文件拷到unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。
问题点数:100、回复次数:21Top
1 楼dynasty_tang(唐朝)回复于 2001-03-21 14:26:00 得分 0
请写个?就这么简单?Top
2 楼cloudred(?)回复于 2001-03-22 12:06:00 得分 0
是呀,就这么简单。
我们头说了:“生活本来就是这么简单!”Top
3 楼jerrymi(泥巴)回复于 2001-03-22 14:46:00 得分 0
用二进制传送文件就没这个问题了Top
4 楼Kevin_qing()回复于 2001-03-22 14:59:00 得分 0
用strchr查找,在替换为space好了Top
5 楼007sampras(007sampras)回复于 2001-03-23 18:05:00 得分 5
# dtox filenameTop
6 楼cloudred(?)回复于 2001-03-23 18:19:00 得分 0
有个在windows下用的win->unix的程序,可惜常常进入Unix看文件时,发现文件里有好多^M,不想再退回到windows转换后再退到unix里,退来退去就没兴致搞了!我是unix新手,也想学学unix下的c编程,对诸位高手来说,这个小程序5分钟都用不了吧!呵呵Top
7 楼cloudred(?)回复于 2001-03-23 18:25:00 得分 0
007sampras: dtox filename就行?Top
8 楼waq(我要它干什么?)回复于 2001-04-09 18:17:00 得分 15
在线编了一个,希望有帮助,主要是理解意思,fopen函数中的第二个参数中有个b字符,表示以二进制方式打开文件,如果不对,把rb和wb写成br和bw,我记不清了,试一试吧
#include <stdio.h>
void main(int argc, char *argv)
{
FILE *fr,*fw;
char c;
if(argc!=3){
printf("Usage: %s dosfilename unixfilename\n",argv);
return;
}
if(NULL==(fr=fopen(argv[1],"rb")){
printf("文件%s不存在!\n",argv[1]);
return;
}
if(NULL==(fw=fopen(argv[2],"wb")){
printf("不能写文件!\n");
return;
}
while(1){
c=fgetc(fr);
if(feof(fr))
break;
if(c=='\r')/*用'\r'来表示^M也不知道对不对,不对自己改
continue;
fputc(fw,c);
}
fclose(fr);
fclose(fw);
}
Top
9 楼waq(我要它干什么?)回复于 2001-04-09 18:19:00 得分 0
有注释的那一行尾少了 */ 号,加上吧Top
10 楼Daiver(Daiver)回复于 2001-04-10 01:00:00 得分 10
用dtox命令就可以了!
dtox 111 >222
Top
11 楼Azz1()回复于 2001-04-10 01:00:00 得分 10
用awk最简单
awk -e'{
gsub($0,...) 好像是 gsub($0, "\015")
printf "%s\n", $0
}' infile > outfileTop
12 楼hem(何明)回复于 2001-04-11 16:47:00 得分 10
/* filename: dtox.c */
#include <stdio.h>
void main(int argc, char *argv[])
{
FILE *fr,*fw;
char c;
if(argc!=3){
printf("Usage: %s dosfilename unixfilename\n",argv[0]);
return;
}
if(NULL==(fr=fopen(argv[1],"rb"))){
printf("文件%s不存在!\n",argv[1]);
return;
}
if(NULL==(fw=fopen(argv[2],"wb"))){
printf("不能写文件!\n");
return;
}
while(1){
c=fgetc(fr);
if(feof(fr))
break;
if(c=='\r')/*用'\r'来表示^M也不知道对不对,不对自己改*/
continue;
fputc(c,fw);
}
fclose(fr);
fclose(fw);
}
我修改过的 版权归原主 , 呵呵
cc -o dtox dtox.c ;
然后把 dtox 拷贝到 /usr/bin/ 目录Top
13 楼bomb_hero(木头青蛙)回复于 2001-04-11 18:41:00 得分 5
本来就有的啊
dtox filename > filenameTop
14 楼penguincn(小企)回复于 2001-04-12 13:53:00 得分 5
这个问题在unix 下不值得讨论,
因为在unix下有太多的工具可以解决它。
用 dtox
tr
awk
perl
vim 的查找替代功能
。。。
都可以搞掂!
Top
15 楼penguincn(小企)回复于 2001-04-12 13:54:00 得分 0
这个问题在unix 下不值得讨论,
因为在unix下有太多的工具可以解决它。
用 dtox
tr
awk
perl
vim 的查找替代功能
。。。
都可以搞掂!
Top
16 楼laowei(reed)回复于 2001-04-19 21:27:00 得分 5
tr -d "\r" <src >dest
100分
Top
17 楼sarocky(自由的孤鹰)回复于 2001-04-20 12:57:00 得分 20
找不到 dtox,不知道是哪里的?
cat file1 | sed s/\013$// > file2Top
18 楼devilhjf(慢慢的风)回复于 2001-04-20 17:01:00 得分 10
#!/usr/bin/perl -w
open(FHD,"path/filename");
while(<FHD>){
s/\^M//;
}
close FHD;Top
19 楼devilhjf(慢慢的风)回复于 2001-04-20 17:13:00 得分 0
可能有点小错误!但大致如此!Top
20 楼laowei(reed)回复于 2001-04-20 21:48:00 得分 5
tr -d "\015" <A >B
or
strings A>B
给分吧Top
21 楼cloudred(?)回复于 2001-04-20 22:56:00 得分 0
对不起,给分稍晚了!Top



