簡體   English   中英

如何在perl中使用帶有數組的grep?

[英]how to use grep with an array in perl?

我在perl文件中有以下幾行代碼:

@arr1 = grep(/"$subslots_det[0]"/,@grepped_int);

供您參考,@ grepped_int數組的轉儲如下所示:

$VAR1 = [
'GigabitEthernet4/2/1   unassigned      YES NVRAM  administratively down down    ',
'GigabitEthernet7/1     unassigned      YES NVRAM  administratively down down    ',
'GigabitEthernet7/2     unassigned      YES NVRAM  administratively down down    ',
        ]

這里假設$ subslots_det [0] =“ 4/2”;

因此,grep語句應匹配:

GigabitEthernet4/2/1   unassigned      YES NVRAM  administratively down down    ',

現在,它沒有這樣做,可能是因為4/2中的正斜杠。 有沒有一種方法可以在以下命令中轉義正斜線:

@arr1 = grep(/"$subslots_det[0]"/,@grepped_int);

這是因為雙引號。

@arr1 = grep(/$subslots_det[0]/, @grepped_int);

正則表達式本身用作引號 ,因此$subslots_det[0]周圍的引號$subslots_det[0]作文字引號字符,因此您嘗試匹配"4/2"而不是4/2

例如:

>perl -e '@s=("a/1","b/2"); @res=grep(/$s[0]/,("aa/1","bb/2")); print @res."\n"'
1

>perl -e '@s=("a/1","b/2"); @res=grep(/"$s[0]"/,("aa/1","bb/2")); print @res."\n"'
0

另外,如果您擔心轉義“ /”字符(除非將其用作正則表達式本身內的文字,否則不應該使用),可以隨時將正則表達式定界符從“ /”更改為“#”或任何其他字符

@arr1 = grep(m#$subslots_det[0]#, @grepped_int);
@arr1 = grep(m!$subslots_det[0]!, @grepped_int);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM