我正在尝试使用正则表达式模式替换用标签替换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:
答案 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