大家好!
我的脚本有一个小问题。我想用/
替换变量中的\/
。这是一个解释:
我有一个变量:
$LAN = GigabitEthernet0/0.20
但是当我在 regex 中使用此变量时,/
是一个问题。因此,我想将GigabitEthernet0/0.20
更改为GigabitEthernet0\/0.20
。
我尝试过这样的操作:$LAN =~ s/FIND/REPLACE/ig;
,但是由于所有/
都不起作用。我也尝试过$LAN =~ m///\//ig;
我正在路由器上执行命令show arp
。这是结果的格式:
Internet 192.168.1.1 34 99gg.zz23.atx2 ARPA GigabitEthernet0/0.20
我使用正则表达式提取设备的IP地址:(\d+.\d+.\d+.\d+).*ARPA\s+$LAN
,显然由于GigabitEthernet 0/0.20
,它与/
不匹配。这就是为什么我要将其转换为\/
。
预先感谢:)
如果您对我的正则表达式有其他建议,请随时告诉我。
答案 0 :(得分:1)
quotemeta()
函数将接收一个字符串并返回它,以便正确地转义正则表达式引擎使用的所有特殊字符。
例如
$lan = quotemeta('GigabitEthernet0/0.20');
$lan
现在为GigabitEthernet0\/0\.20
答案 1 :(得分:1)
问题是您需要转义正则表达式中出现的所有斜杠。因此,当您具有以下内容时,FIND为/并替换为\ /
s/FIND/REPLACE/ig
您不能只按原样放置它们-您需要对其进行转义。而且您还需要逃脱转义反斜杠。变成了
s/\//\\\//ig
看起来很可怕,被称为Leaning Toothpick Syndrome。
但是您不必那样做,因为您可以更改s ///或m //等中用于分隔的字符...像此示例一样,尽管您仍然需要转义反斜杠。
s%/%\\/%ig