这是我的脚本,用于检查文件中是否存在版权。
use strict;
use warnings;
use List::Util 'first';
my $filename="sample.txt"; # this file name will be passed-in to the script.
my @fileContent=`cat $filename`;
my $copyrightFound = first { /copyright .* Shakespeare/i } @fileContent;
if (!$copyrightFound) {
print "\nERROR: Copyright missing\n";
exit;
}
#copyright Found
print @fileContent;
if (grep /Copyright (c) \d+ by Bill Shakespeare\nAll rights reserved./,@fileContent ) {
print "\nCopyright is good\n";
} else {
print "\nCopyright needs to be fixed\n";
}
打印:
$ perl copyrightCheck.pl
Copyright (c) 2010 by Bill Shakespeare
All rights reserved.
Copyright needs to be fixed
但版权是好的,有没有更好的方法来检查这个?或者我的grep命令有什么问题? All rights reserved.
也可以显示在同一行或下一行,我可以使用\n*
来检查相同的内容吗?
答案 0 :(得分:1)
问题是您将文件加载到文件行的数组中,因此Copyright (c) 2010 by Bill Shakespeare
和All rights reserved.
最终会出现在单独的数组元素中。然后尝试匹配此阵列元素上的多行版权字符串,该字符串失败。
要解决此问题,您可以尝试将文件加载到标量中,并在该标量上使用正则表达式匹配。您还需要转义要匹配的任何括号:
my $fileContent = `cat $filename`;
...
if ($fileContent =~ /Copyright \(c\) \d+ by Bill Shakespeare\nAll rights reserved./)
{
...
}
我还建议你使用Perl的open
函数和<>
运算符将文件的内容加载到变量。