免费注册 查看新帖 |

Chinaunix

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

如何用perl实现文件的格式由dos格式转换为unix格式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-11 23:33 |只看该作者 |倒序浏览
如题。请高手不吝赐教,谢过先~~

论坛徽章:
0
2 [报告]
发表于 2008-09-12 08:06 |只看该作者
#!/usr/bin/perl -wi

#
# 功能:
#   将源程序中的Tab扩展为空格,或将程序中多余的空格还原为Tab。
#
# 说明:
#   缺省的tab长度为4。
#
# 使用举例:
#
#   myet main.c             // 将main.c中的Tab扩展为空格
#   myet -t 8 main.c        // 每个Tab字符相当于8个空格,而不是缺省的4个
#
#   myet -r main.c          // 将main.c中的空格还原为Tab
#   myet -r -t 6 main.c     // 将main.c中的空格还原为Tab,每个Tab字符相当于6个空格
#

use strict;
use Getopt::Std;

use Text::Tabs;
$tabstop = 4;               # 缺省的Tab长度为4

my %hOpts;

getopts( "rt:", \%hOpts );
$tabstop = $hOpts{ t } if $hOpts{ t };

if ( $hOpts{ r } ) {
# 将空格还原为Tab
    while ( <> )
    {   print unexpand( $_ );   }
} else {
# 将Tab扩展为空格
    while ( <> ) {
        while ( $_ =~ s/\t+/' ' x ( length( $& ) * $tabstop - length( $` ) % $tabstop )/e ) {
            # 空循环,直到不再匹配为止
        }
        print;
    }
}   # end of else

[ 本帖最后由 fengc 于 2008-9-12 08:08 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-09-12 08:11 |只看该作者
#!/usr/bin/perl -pi

BEGIN {
    undef $/;
}

s/\r\n/\n/g;

论坛徽章:
0
4 [报告]
发表于 2008-09-12 10:53 |只看该作者
用linux 上的 dos2unix 命令就可以了

论坛徽章:
0
5 [报告]
发表于 2008-09-12 14:47 |只看该作者
cat yourfile | perl -nle 's/\r//; print'

论坛徽章:
0
6 [报告]
发表于 2008-09-15 21:07 |只看该作者
在windows下的转换方法和在unix下似乎是不同的

------------------------------------------------------------------
uinx下有命令

SYNOPSYS
       dos2unix [options] [-c convmode] [-o file ...] [-n infile outfile ...]
       Options:
       [-hkqV] [--help] [--keepdate] [--quiet] [--version]


DESCRIPTION
       dos2unix, the program that converts plain
       text files in DOS/MAC format to UNIX format.


-------------------------------------------------------------------
windows下我现在知道的方法是要用二进制打开文件,然后转换成十六进制,然后用0a替换0d0a

不知道还有什么好的方法不??

论坛徽章:
0
7 [报告]
发表于 2008-09-16 22:17 |只看该作者
open(UNIX, '>:unix', 'unix.txt');

这样往里面 写的 文本 就是 unix格式的了

论坛徽章:
0
8 [报告]
发表于 2008-09-18 09:09 |只看该作者

回复 #4 xunxin 的帖子

好像转换中文会乱码.

论坛徽章:
0
9 [报告]
发表于 2008-10-11 02:21 |只看该作者
有这么复杂吗?

* dos2unix
  perl -pi.bak -e 's/\r\n/\n/g' foo

* unix2dos
  perl -pi.bak -e 's/[^\r]\n/\r\n/g' foo

[ 本帖最后由 KevinLee39 于 2008-10-11 02:22 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP