繁体   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