繁体   English   中英

Perl Grep命令在数组中搜索

[英]Perl Grep command to search in array

我正在使用Perl和grep命令在数组输出中查找模式。 我有兴趣在数组中搜索以下文本:

/tmp/12345.hash

12345可以是任何数字序列,例如234567889/tmp/.hash将保持一致。 我对regex不太满意,因此不确定如何构建正确的regex语句。

@line = grep /hash/, @exp;

我最初的搜索只是看单词hash,但在其他行上匹配,结果我得到了错误的结果。

正则表达式可让您以更高的精度将需求编码为“模式”:

my @filtered = grep { m{^/tmp/[0-9]+\.hash$} } @all;

我将{}用作分隔符,因为通常的//必须将模式中的每个/转义。 然后,在前面需要m (与//分隔符不同,在此处可以省略m )。

^匹配字符串的开头(如果/m “修饰符”有效,则匹配其他位置) /tmp似乎是路径的开始,但是如果前面有(例如)前导空格,则上面的内容将不匹配(除非您将其更改为^\\s*/tmp以便允许可选的空格) 。 仔细考虑您的数据。

$与字符串的末尾匹配,如果有一个则匹配末尾的换行符(如果/m修改此字符,则在末尾) 要在hash后也将字符串与更多字符匹配,请删除$

模式本身设置了您在问题描述中要说的内容:必须有一个整数,该整数是变化的,其余的是固定的。

perlretut教程随附了Perl自己的(优秀)文档。


使用修饰符$str =~ /.../m ,该字符串被视为多行字符串,因此,如果其中包含换行符,则该正则表达式中的^$匹配每行的开头和结尾为好。

始终只匹配字符串末尾的锚点是\\z (另请参见\\Z ,它与$匹配,但对/m不敏感)。 请参阅persre中的断言 ,并在此页面上查看答案。

暂无
暂无

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

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