簡體   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