linux - Perl 一行liner + 匹配IP地址

标签 linux perl shell ksh

我正在尝试构建 Perl 一行代码
与文件中的 IP 地址完全匹配,并打印匹配的 IP

如果 IP 不匹配则不会打印 IP 地址。

REMARK - IP地址左/右[left]xxx.xxx.xxx.xxx[right] - 可以是任何字符但IP本身必须完全匹配

问题是无论我在 echo 后面放什么,Perl 都会打印任何字符串

请指教我的语法有什么问题?

一些例子

     # export IP=23.45.7.0

应该匹配IP

      # echo 23.45.7.0 | perl  -pe 'next if /^*#/;/(\b|\D)$ENV{IP}(\b|\D)/'
        23.45.7.0

不应该匹配IP

       # echo 123.45.7.0 | perl  -pe 'next if /^ *#/; /(\b|\D)$ENV{IP}(\b|\D)/'
         123.45.7.0

应该匹配IP

     # echo IP23.45.7.0IP | perl -pe 'next if /^ *#/; /(\b|\D)$ENV{IP}(\b|\D)/'
       IP23.45.7.0IP

不应该匹配IP

       # echo 23.45.7.00 | perl  -pe 'next if /^ *#/; /(\b|\D)$ENV{IP}(\b|\D)/'
         23.45.7.00

最佳答案

要匹配常见模式,您可以查看 Regexp::Common在这种情况下,特别是 Regexp::Common::net

根据您的规范:

echo 10.11.12.13|perl -MRegexp::Common=net -nE '$_=~/^$RE{net}{IPv4}{-keep}$/ and say $1'

10.11.12.13

...鉴于此无效地址不匹配:

echo 10.11.1200.13|perl -MRegexp::Common=net -nE '$_=~/^$RE{net}{IPv4}{-keep}$/ and say $1'

关于linux - Perl 一行liner + 匹配IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14069544/

相关文章:

python - 使用比 Linux 服务器上安装的版本更新的 Python 版本

python - 我可以在 Perl 正则表达式中使用命名组来获取哈希结果吗?

regex - 有没有更好的方法用/x 编写 Perl 正则表达式,这样代码仍然易于阅读?

perl - 为什么 Perl 认为 `1 and 0` 是真的?

shell - 使用 sed 无法使用 "- "分隔符拆分字符串

linux - 如何在 Linux shell 中临时调整日期/时间

python - 我可以使用 Python 手动将条目写入 journald 吗?

Firefox 从命令行刷新当前选项卡

linux - Linux 程序集中的文件权限

php - 如何从 PHP 调用 MySQL 交互式客户端?