繁体   English   中英

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

[英]Imporperly formatting when printing tabs with perl

我正在尝试用正则表达式模式替换以制表符替换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脚本,并且运行良好。 是什么赋予了?

**测试目录中的输出良好*

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: 

那这个呢? 它使用空格使第一列具有固定长度,然后为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM