原帖由 dbsuit 于 2007-6-25 18:16 发表于 1楼
需求:
把文件的回车符去掉
我这样做的:
tr -d '\r' <file1 >file2
mv file2 file1
一切OK
但现在禁止生成临时文件,需要实现 tr -d '\r' <file1 >file1 可惜,这样输出后,file1为NUL ...
原帖由 maluyao 于 2007-6-25 22:53 发表于 6楼
用vim自带的功能最好吧。
例如有个1.txt文件中有换行符号。
echo -e ':%s/\\n//g' "\n" ':wq' |vim 1.txt 2>/dev/null
也问个问题,emac如何处理?
原帖由 phoenixson 于 2007-6-25 23:00 发表于 7楼
其实用vim也是一样要生成tmp文件的,这个文件存在于缓冲区内,如果你再另外在一个terminal中打开这个文件(或者不正常推出编辑),它会提示你已经存在**tmp
原帖由 dbsuit 于 2007-6-26 11:13 发表于 9楼
我刚试了一下,echo -e ':%s/\\n//g\n:wq' |vim -n t1 2>/dev/null,可以是可以,但有个很大的问题,性能太差,执行一个几行的文本文件,要好几秒,估计和VIM的处理机制有关,如果是大批量的文件,根本没法用。
不让使用临时文件是编码的要求,要求尽量不产生临时文件,我现在为了完成任务,不得以用了临时文件,但还是想找到更好的要求
我发现这个问题可能和管道的机制有关,我测试了一下,似乎无论使用“|",还是"<",">"这些,只要管道输出的文件和管道输入的文件是同一个文件,最后文件内容一律为NULL。我对这块不太熟,是不是有什么参数,或者缓存什么能解决,还需要大家的智慧
原帖由 wysilly 于 2007-6-25 20:56 发表于 3楼
sed -i -e 's/\r//' file1
原帖由 lilianglinux 于 2007-6-28 10:30 发表于 15楼
为什么这个方法没有人评论呢?
我感觉不是能很好完成楼主的任务吗? 还是我太菜.....
原帖由 dbsuit 于 2007-6-28 15:11 发表于 18楼
我刚测试过了,在linux下,dos2unix,sed -i -e 's/\r//' file1 都可以很好的满足要求。但是LINUX和WINDOW间本身就不会有问题,windows文件用FTP方式上传到Linux server,无论binary还是ascii,都会自动的去掉回车符
我在unix上测试,(HP-UX),
发现 1 无dos2unix指令,至少HP-UX没有,别的UNIX有没有不清楚
2 sed -i -e 's/\r//' file1 也达不到目的,没有-i参数,sed指令一共只有-f,e,n3个参数,经反复测试均不能达到要求
不得已,还是用临时文件最后mv改名交差了事
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |