【问题标题】:regex - validate IPV6 address正则表达式 - 验证 IPV6 地址
【发布时间】:2017-08-08 18:39:43
【问题描述】:

正如我在不同的thread 中询问的那样,Regex 可以正常使用 shell 脚本,但是当我使用 echo 命令作为

 echo "2001:0Db8:85a3:0000:8a2e:0370:7334" | grep "^([0-9a-fA-F]{0,4}:){1,7}([0-9a-fA-F]){0,4}$"

没有输出,echo $? 返回 1

正则表达式不能与 echo/grep 一起使用吗?

【问题讨论】:

  • 使用:echo "2001:0Db8:85a3:0000:8a2e:0370:7334" | grep -E "^([0-9a-fA-F]{0,4}:){1,7}([0-9a-fA-F]){0,4}$"grep 中扩展正则表达式支持

标签: regex shell


【解决方案1】:

您在这里使用的是 ERE POSIX 语法。使用-E 选项使grep 使用POSIX ERE。

或者,转义 (){} 以使模式与 POSIX BRE 兼容:

echo "2001:0Db8:85a3:0000:8a2e:0370:7334" | grep "^\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}$"

online demo

【讨论】:

  • -r in grep 表示递归搜索。只有其他支持显示的正则表达式的选项是-P (PCRE)
  • @anubhava 对不起,我把sedgrep 弄混了。
  • 是的,我也这么认为:)
  • 这在 solaris 上不起作用。我应该添加其他选项吗?
  • @Batty 据我所知,您可能对此有疑问。 Solaris grep 似乎不支持限制量词。不过,我无法访问 Solaris OS。如果您有问题,请告诉我,我会重新修改模式。
猜你喜欢
  • 1970-01-01
  • 2013-01-16
  • 2011-09-11
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多