免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2375 | 回复: 5
打印 上一主题 下一主题

我写的一个小程式,把win中的回车符转换到UNIX下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-01-18 23:44 |只看该作者 |倒序浏览
cut++++++++++++++++++++++++++++++++++++++++++cut

/*
* This progrome used to change the 'Enter' from FUCK Windows to UNIX.
* Written by 8lu3 HomePage: http://209.142.209.161/~bluepunk
* mailto: blue@bsdmail.org
*/
#include"sys/types.h"
#include"sys/stat.h"
#include"fcntl.h"
#include"unistd.h"
main(int argc, char *argv[])
{
        int             fd;
        int             offset;
        int             tmp;
        char            byte;
        char            fuck_enter = '\x0d';
        char            unix_enter = '\x0a';
        if ((fd = open(argv[1], O_RDWR)) == -1) {
                printf("open file fail!\n";
        } else {
                printf("Open file success,fd number is: %d\n", fd);
                while (read(fd, &byte, 1) != 0)
                        if (byte == fuck_enter) {
                                offset = lseek(fd, 0, SEEK_CUR);
                                offset--;
                                lseek(fd, offset, SEEK_SET);
                                write(fd, &unix_enter, 1);
                                offset++;
                                lseek(fd, offset, SEEK_SET);
        }
        }
        close(fd);
};

cut+++++++++++++++++++++++++++++++++++++++++++cut

论坛徽章:
0
2 [报告]
发表于 2003-01-19 08:01 |只看该作者

我写的一个小程式,把win中的回车符转换到UNIX下

...

not bad! though the output of file descriptor number may confuse users. They might think only 3 carriage return were replaced...   

give you an "A" if the source code contains no dirty words.


and, actually easier would be done with:


tr -d '\015' < oldfile >; newfile

论坛徽章:
0
3 [报告]
发表于 2003-01-19 09:32 |只看该作者

我写的一个小程式,把win中的回车符转换到UNIX下

在shell版有这样的贴:

ls -1 | awk '{printf "sed \047s/STR1/STR2/g\047 %s >;%s.sed;mv %s.sed %s\n", $1, $1, $1, $1;}'

论坛徽章:
0
4 [报告]
发表于 2003-01-19 10:36 |只看该作者

我写的一个小程式,把win中的回车符转换到UNIX下

...


这个帖子的意图是将当前目录下的所有文件中的 STR1 代换为 STR2。光这样是不工作的,你有没有试过? :em11: 。

应修改一下,并加上末尾的 pipe

ls -1 | awk '{printf "sed \047s/^M//g\047 %s >;%s.sed;mv %s.sed %s\n", $1, $1, $1, $1;}' | sh

其中 ^M 为控制字符,由 [CTRL]+V+M 得到。但是,我觉得这个 shell script 虽然用了很多技巧,但是又是 awk, sed ,还要 pipe, sh,实际上没有必要搞得那么复杂。

完全可以用

for i in *; do tr -d '\015' < $i >; $i.tmp; mv $i.tmp $i; done

就可以完成同样的任务。

论坛徽章:
0
5 [报告]
发表于 2003-01-19 15:33 |只看该作者

我写的一个小程式,把win中的回车符转换到UNIX下

tr / awk / perl / sed / vi都可以完成以上功能。

.

论坛徽章:
0
6 [报告]
发表于 2003-01-20 03:39 |只看该作者

我写的一个小程式,把win中的回车符转换到UNIX下

under linux, there are a tool call: dos2unix or unix2dos to do this conversion. But I don't know if free/OpenBSD have them..

WRX
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP