arrays - 如何忽略 perl grep 中的任何空值?

标签 arrays perl grep

我正在使用以下内容来计算文件中某个模式出现的次数:

my @lines = grep /$text/, <$fp>;
print ($#lines + 1);

但有时它会比实际值多打印一个。我查了一下,这是因为 @lines 的最后一个元素为空,这也算在内。

grep 结果的最后一个元素有时如何为空?另外,这个问题如何解决?

最佳答案

这在很大程度上取决于您的模式,但您可以做的一件事是加入几场比赛,第一场比赛取消任何仅包含空格(或不包含任何内容)的行的资格。此示例将拒绝任何空行、仅换行符或任何数量的空白行。

my @lines = grep { not /^\s*$/ and /$test/ } <$fp>;

请记住,如果 $test 的内容碰巧包含正则表达式特殊元字符,则它们要么需要用于其元字符目的,要么使用 quotemeta() 进行 sanitizer 。 .

我的理论是,您可能有一行以\n 结尾,它以某种方式与您的 $text regexp 匹配,或者您的 $text regexp 包含在您不知情的情况下影响匹配的元字符。无论哪种方式,我提供的代码段至少会强制拒绝“空白行”,其中空白可能意味着完全空白(不太可能),换行符终止但否则为空(可能),或者包含(可能)行的空白在打印时显示为空白。

关于arrays - 如何忽略 perl grep 中的任何空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6631043/

相关文章:

python - 使用 WebKit(或 Gecko)查找呈现的 HTML 元素位置

c++ - 查找 C++ 项目中有多少个 goto

performance - 为什么这个程序在使用 goroutines 时表现不佳?

C++ 指针数组为每个元素返回相同的值

c++ - 使用cstring数组c++循环获取用户输入

c - 在 C 中 append 一个带空终止符的字符

perl - 使用 JSON-RPC 协议(protocol)的 Perl Client to API 使用哪些模块?

php - 在 PHP 中使用整数过滤数组值

mysql - 连接到数据库 Perl

linux - 使用egrep -o后如何进行egrep