【问题标题】:Linux Grep or Sed Regular Expression for IP and optional CIDR用于 IP 和可选 CIDR 的 Linux Grep 或 Sed 正则表达式
【发布时间】:2020-11-29 23:41:43
【问题描述】:

想知道是否有人知道一种简单的方法来一次 grep IP 和 CIDR 形式的 IP

预期输出:

78.0.0.0/8

136.144.199.198

电流输出:

78.0.0.0

136.144.199.198

这是我当前的正则表达式:

grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\/[0-9]\{1,\}' 

这看起来可以工作,但似乎只适用于 perl

^([0-9]{1,3}\.){3}[0-9]{1,3}(\/([0-9]|[1-2][0-9]|3[0-2]))?$

【问题讨论】:

  • @Riaan :您可以使用-P 打开 Perl 风格的正则表达式。
  • @user1934428 在我看来就像一个普通的旧 ERE,所有 grep 都支持 -E,无需使用 -P 并使其成为实验性的和特定于 GNU 的。
  • @EdMorton :我同意我们在这里不需要-P。我提到它是因为 OP 在他的问题中表示熟悉 Perl-Regexp,所以我认为他可能更喜欢 -P 而不是 -E

标签: regex bash sed grep ipv4


【解决方案1】:

我看到了三种方式:

对 perl 正则表达式使用 -P 选项:

grep -Po '([0-9]{1,3}\.){3}[0-9]{1,3}(/[0-9]|[1-2][0-9]|3[0-2])?' file

同样的正则表达式也适用于 -E 选项:

grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}(/[0-9]|[1-2][0-9]|3[0-2])?' file

或者转义所有特殊字符:

grep -o '\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\(\/[0-9]\|[1-2][0-9]\|3[0-2]\)\?' file

所有这些命令都给出相同的结果:

78.0.0.0/8
136.144.199.198

【讨论】:

  • 在我看来,这就像一个普通的旧 ERE,所有 greps 都支持 -E,无需使用 -P 并使其具有实验性和 GNU 特定性。
  • @EdMorton:你是对的,相应地进行了编辑。我使用 太多 Perl ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
  • 2021-05-11
  • 1970-01-01
相关资源
最近更新 更多