大家好!
发短信
我的脚本中有一点问题。我想用/
替换变量中的/
。这里有一个解释:
我有一个变量:
$LAN = GigabitEthernet0/0.20
但是当我在正则表达式中使用此变量时,/
是一个问题。所以我想把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+).*ARPAs+$LAN
,显然由于/
,它与GigabitEthernet 0/0.20
不匹配。这就是为什么我想把它变成/
.
提前:)感谢
如果您对我的正则表达式有其他建议,请随时告诉我。
quotemeta()
函数将获取一个字符串并返回它,以便正确转义正则表达式引擎使用的所有特殊字符。
例如。
$lan = quotemeta('GigabitEthernet0/0.20');
$lan
现在GigabitEthernet0/0.20
问题是您需要转义正则表达式中出现的所有斜杠。因此,当您有以下内容时,FIND 是/并且替换是 \/
s/FIND/REPLACE/ig
你不能只是把它们按原样放进去——你需要逃避它们。你也需要转义反斜杠。所以它变成了
s///\//ig
看起来很丑陋,被称为倾斜牙签综合症。
但是您不需要这样做,因为您可以更改用于在 s///或 m//等中分隔的字符......像这个例子,尽管你仍然需要转义反斜杠。
s%/%\/%ig