Regex 如何在If语句中使用正则表达式?Perl
我是编程新手,遇到了一个问题。我们必须使用Perl编写一个打开文件的脚本,然后使用正则表达式在每一行循环,然后打印结果。打开文件和循环,但我不知道如何实现正则表达式。当分配大纲建议数字为338时,它输出0个匹配结果。如果我不使用正则表达式,它将输出2987行,这是行的总数-这是正确的。所以正则表达式有点不正确,我就是搞不懂。任何帮助都将不胜感激 到目前为止,我所掌握的情况如下:Regex 如何在If语句中使用正则表达式?Perl,regex,perl,Regex,Perl,我是编程新手,遇到了一个问题。我们必须使用Perl编写一个打开文件的脚本,然后使用正则表达式在每一行循环,然后打印结果。打开文件和循环,但我不知道如何实现正则表达式。当分配大纲建议数字为338时,它输出0个匹配结果。如果我不使用正则表达式,它将输出2987行,这是行的总数-这是正确的。所以正则表达式有点不正确,我就是搞不懂。任何帮助都将不胜感激 到目前为止,我所掌握的情况如下: use warnings; use strict; my $i = 0; my $filename = 'C:\Us
use warnings;
use strict;
my $i = 0;
my $filename = 'C:\Users\sample.log.txt';
open (fh, '<', $filename) or die $!;
while(<fh>) {
if ($filename=~ /(sshd)/){
$i++;
}
}
close(fh);
print $i;
使用警告;
严格使用;
我的$i=0;
my$filename='C:\Users\sample.log.txt';
打开(fh,想想你的这段代码:
while(<fh>) {
if ($filename=~ /(sshd)/){
$i++;
}
}
操作代码有一些错误,我已经纠正了
use warnings;
use strict;
use feature 'say';
my $i = 0;
my $filename = 'C:\Users\sample.log.txt';
open my $fh, '<', $filename
or die "Couldn't open $filename";
map{ $i++ if /sshd/ } <$fh>;
close($fh);
say "Found: $i";
使用警告;
严格使用;
使用特征“说”;
我的$i=0;
my$filename='C:\Users\sample.log.txt';
打开我的$fh,“if($filename=~/(sshd)/)
应该是if(/sshd/)
哇,谢谢!这样你就不必在perl中使用regex命令了?我用来尝试并找到答案的每个资源都使用了”=~“遵循正则表达式并不总是必要的?他不是这个意思。正则表达式匹配涉及两个运算符。/foo/
是执行正则表达式匹配的运算符m/foo/
的缩写(与执行替换的s//
或根本不必使用正则表达式的tr//
相反)。与之协同工作的第二个运算符是=~
,它将操作绑定到它将要操作的字符串。如果没有绑定到它的字符串,它将在$\uuu
上操作,这也是while()分配给的,如果您不将其分配给其他对象(但您应该)。还有perl-lne'$i++If/sshd}{print$i'C:\Users\sample.log.txt
或使用END{}
而不是爱斯基摩人之吻。这相当于grep-cshd C:\Users\sample.log.txt
…但我认为这段perl代码会增长。@stevesliva:确实如此!但OP似乎并没有在这里寻找一行,所以我提供了一个作为perl脚本的答案。
while (<fh>) {
$i++ if /sshd/;
}
use warnings;
use strict;
use feature 'say';
my $i = 0;
my $filename = 'C:\Users\sample.log.txt';
open my $fh, '<', $filename
or die "Couldn't open $filename";
map{ $i++ if /sshd/ } <$fh>;
close($fh);
say "Found: $i";