1

正規表現パターンによる置換を使用して、md5sum 出力のすべてのスペースをタブに置き換え、通常の md5sum 出力を反転して(fingerprint<space>/path/to/file)、/path/to/file を最初に出力し、md5 フィンガープリントを 2 番目に 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";
}

a、b、c、d という名前の 4 つの空のテキスト ファイルを含むサンプル ディレクトリを作成し、perl スクリプトを実行したところ、問題なく動作しました。何を与える?

** テスト 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: 
4

1 に答える 1

1

これはどうですか?固定長の最初の列、次にタブを持つためにスペースを使用しています。

#!/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
于 2013-10-21T09:18:59.527 に答える