并为新问题道歉。我正在编写一个perl脚本,以便在运行之前检查MD5SUM。可以将其视为"不要更改脚本检查"。我设法获得FCIV二进制来计算MD5SUM,但是没有办法只获得MD5SUM作为单个字符串输出。
它向控制台吐出以下内容:
# //
# // File Checksum Integrity Verifier version 2.05.
# //
# 3e593beb3bb51a23f5a2ccae0f2c70a3 perlscript.pl
我想要删除这个多行字符串,只捕获md5sum。我假设最好的方法是使用替换正则表达式。不幸的是,但是我遇到了多行的字符串问题,它会占用整个事情。
1)除了正则表达式之外,还有更好的方法来处理此输出吗? 2)如果我们使用正则表达式,你会建议什么?
这就是我试图给我们的:
$md5val =~s /(\/\/[.])*\n//;
我对这一切都很陌生,任何评论都表示赞赏。提前谢谢。
答案 0 :(得分:1)
一种可能的方法:拆分换行,走最后一行,取第二个字:
#!/usr/bin/perl
use warnings;
use strict;
my $md5val = ' # //
# // File Checksum Integrity Verifier version 2.05.
# //
# 3e593beb3bb51a23f5a2ccae0f2c70a3 perlscript.pl
';
$md5val = (split ' ', (split /\n/, $md5val)[-1])[1];
print "<$md5val>\n"
答案 1 :(得分:1)
简单直接的解决方案是使用Perl的标准库。特别是,Digest::MD5已经做了你想做的事。
use Digest::MD5 qw(md5_hex);
my $md5val = md5_hex($data);
答案 2 :(得分:1)
不使用替换来删除您不想要的所有内容,而是使用捕获组来提取您执行的部分:
use warnings;
use strict;
my $md5val = do {local $/; <DATA>};
my ($md5sum) = $md5val =~ /\b([0-9a-f]{32})\b/;
print "$md5sum\n";
__DATA__
# //
# // File Checksum Integrity Verifier version 2.05.
# //
# 3e593beb3bb51a23f5a2ccae0f2c70a3 perlscript.pl
输出:
3e593beb3bb51a23f5a2ccae0f2c70a3