在Perl字符串中用“ \ /”替换“ /”

时间:2018-08-08 09:28:39

标签: regex perl text scripting

大家好!

文字

我的脚本有一个小问题。我想用/替换变量中的\/。这是一个解释:

我有一个变量:

$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,它与/不匹配。这就是为什么我要将其转换为\/

预先感谢:)

如果您对我的正则表达式有其他建议,请随时告诉我。

2 个答案:

答案 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