我在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);
答案 0 :(得分:5)
这是因为双引号。
@arr1 = grep(/$subslots_det[0]/, @grepped_int);
正则表达式itself serves as quoting,因此$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
另外,如果你担心逃避" /"角色(除非它在正则表达式本身中用作文字,否则你不应该这样做),你总是可以{" /"到"#"或change the regex delimiter:
@arr1 = grep(m#$subslots_det[0]#, @grepped_int);
@arr1 = grep(m!$subslots_det[0]!, @grepped_int);