写个脚本删除所有文件的行尾空白符,并将.c.h文件的\t转换为4个空格

写个脚本删除所有文件的行尾空白符,并将.c.h文件的\t转换为4个空格

#!/usr/bin/perl

use File::Find;
use File::Copy;

my @files;
my @dirs = ".";
my $extention = ".bak";

find(sub { push(@files, $File::Find::name) if -f && !/\.bak$/ }, @dirs);

for (@files) {
    my $file = $_;
    my $bakfile = $file . $extention;

    if (-f && !/\.o$/) {
        print $file . "\n";
        copy $file, $bakfile or die "Copy failed: $!";
        open FO, $bakfile or die "Cannot open '$bakfile': $!";
        open FN, ">$file" or die "Cannot open '$file': $!";

        if (/\.(pl|[ch])$/) {
            while (<FO>) {
                s/\t/    /g;
                s/[ \r]+$//;
                print FN $_ or die "write '$file' err: $!";
            }
        } else {
            while (<FO>) {
                s/[ \t\r]+$//;
                print FN $_ or die "write '$file' err: $!";
            }
        }

        close FN;
        close FO;
        unlink $bakfile;
    }
}



grep -v '^$'
sed 's/\t/\ \ \ \ /g'
对于你这个要求,用shell可能比perl实现的快


QUOTE:
原帖由 net_robber 于 2008-7-15 22:46 发表
对于你这个要求,用shell可能比perl实现的快

shell方法我会;
在wondows下用的(unix下当然也能用),遍历所有文件,删除行尾空白,并s/\t/    /。


QUOTE:
原帖由 net_robber 于 2008-7-15 22:46 发表
对于你这个要求,用shell可能比perl实现的快

man indent
$a =~ s/^\s+//;删除开头空格
$a=~ s/\s+$//;删除结尾空格


QUOTE:
原帖由 flw 于 2008-7-16 08:57 发表

man indent

你这个更狠

哈哈