[英]Perl grep a range on values in an array
文件內容:
Number of items Enabled:43
Number of items Enabled:95
命令在41-59之間grep輸出文件中的任何值
grep -E '5[1-9]|4[1-9]$' test.txt
退貨
Number of items Enabled:43
我需要在具有相同內容的數組中執行相同的操作。 目前,我正在使用以下命令返回特定數字,但希望查找41-59相同的范圍:
if (grep(/43/, @TESTARRAY)) {}
我似乎無法正確理解語法
那是因為正則表達式是關於模式而不是_values的。 grep
根本不了解相對價值。
您需要先提取值:
#!/usr/bin/env perl
use strict;
use warnings;
while (<DATA>) {
if ( m/Enabled:(\d+)/
and $1 > 41
and $1 < 59 )
{
print;
}
}
__DATA__
Number of items Enabled:43
Number of items Enabled:95
grep
函數可以類似的方式使用:
print grep { m/Enabled:(\d+)/ and $1 > 41 and $1 < 59 } <DATA>;
您不應該嘗試構建用於選擇數字范圍的正則表達式-它將使您陷入瘋狂。
use strict;
use warnings;
while(<DATA>){
if ( m/.*?Enabled:(4[1-9])|(5[0-9])/){
print $_;
}
}
__DATA__
Number of items Enabled:43
Number of items Enabled:50
Number of items Enabled:52
Number of items Enabled:40
m/.*?Enabled:(4[1-9])|(5[0-9])/
1) .*?
是非貪婪的正則表達式,這意味着它將匹配所有內容,直到下一個元素
從您的正則表達式中找到(在本例中為“已啟用”)
2) Enabled:
匹配字符串Enabled:
3) (4[1-9])|5[0-9])
3.1) (4[1-9])
將搜索4,后跟1-9之間的數字
|
要么
3.2) (5[0-9])
將搜索5,后跟0-9之間的數字
並沒有什么不同,請注意,您可以在這種情況下避免更改:
print join " ", grep(/\b([45][0-9])$/ && $1 != 40, qw(12 18 41 52 40 59 64))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.