[英]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.