使用perl打印选项卡时格式不正确

时间:2013-10-19 04:59:23

标签: perl printing formatting md5 md5sum

我正在尝试使用正则表达式模式替换用标签替换md5sum输出中的所有空格,并翻转正常的md5sum输出(fingerprint<space>/path/to/file),以便首先打印/ path / to / file,然后输出md5指纹在输出到STDOUT。我有它工作得很好,但由于某些原因,并非我的所有空间都转换为制表符,你可以看到这个示例输出(参见第4项的ps项目):

/bin/pidof  7b6aa27625786df26cd2511a6ccb8ec6 

/bin/ping   120d994f6bd6e05e10c7aa4ffeb157b9 

/bin/ping6  6578368ea1a280524ad5c944e8de825f 

/bin/ps a68ff229e6c54ffa71d3de956395af5c 

/bin/pwd    a30c8ea470134ba60d9008ca5723c556 

/bin/rbash  83f4aacf3157bfab413d009f48980e61 

代码

#!/usr/bin/perl -w

foreach $arg (@ARGV) {
push (@md5, `md5sum $arg`);
}

foreach $entry (@md5) {
$entry =~ s/(^.*) +(.*$)/$2\t$1/;
print $entry . "\n";
}

我创建了一个包含4个空白文本文件的示例目录,名为a,b,c和d,并运行了我的perl脚本,它运行正常。是什么给了什么?

** TEST DIR *

中的良好输出
host{user}114: ls
a  b  c  d  mymd5.pl
host{user}115: ./mymd5.pl *
a   d41d8cd98f00b204e9800998ecf8427e 

b   d41d8cd98f00b204e9800998ecf8427e 

c   d41d8cd98f00b204e9800998ecf8427e 

d   d41d8cd98f00b204e9800998ecf8427e 

mymd5.pl    719e2f8f878077ae3ef037369eb38e48 

host{user}116: 

1 个答案:

答案 0 :(得分:1)

这个怎么样?它使用空格来固定长度的第一列,然后是TAB。

#!/usr/bin/perl -w
use strict;
use warnings;

my @md5;
my $longest_filename = 0;
foreach my $arg (@ARGV) {
   push (@md5, `md5sum $arg`);
   $longest_filename = length($arg) if length($arg)>$longest_filename;
}
chomp(@md5);


$longest_filename++;
foreach my $entry (@md5) {
  my ($md5,$filename) = $entry =~ m/^(.+?)\s(.+?)$/gis;
  printf "%-".$longest_filename."s\t%-16s\n",$filename,$md5;  
}


 bd.pl                                  b367dcf675902583a113a13e3b345809
 p1.pl                                  f5a10f748917ac8cf90d2e223c5b1cbf
 lognlonglong_filename_tohave.txt       d41d8cd98f00b204e9800998ecf8427e