使用 zegrep 没有返回我需要的内容

使用 zegrep 没有返回我需要的内容

我需要过滤一个文件中的 5 个 IP 地址。所有 *.tgz 文件。

IP 地址是 10.85.1.1、10.85.1.2、10.85.1.3、10.85.1.4、10.85.1.5

我使用这个命令:

zegrep -ai "10.85.1.[1-5]" *.tgz 

例如,这还会返回 Ip 10.85.1.45。我如何告诉命令 [1-5] 是我的字符串的结尾?

我认为这可以解决问题:

zegrep -ai '10.85.1.[1-5]$' *.tgz

但这没有返回任何内容。不过,这种情况是有可能的,因此为了再次检查我的命令,我尝试使用文件中的 IP(我只是获取了 tail 并获取了它返回的最新 IP 之一)。

zegrep -ai '10.85.1.1[5-6]$' *.tgz

这也没有返回任何内容。所以我的命令仍然不正确。

答案1

关于你正在尝试的表达,有几点需要说明:-

  • 当您使用时,.它将匹配任何单个字符:要匹配,.它需要像 一样进行转义"10\.85\.1\.[1-5]"
  • 如果解压缩的文件是二进制(如-a所暗示的),那么您不能假设行尾将被正确处理。
  • 您可以使用"10\.85\.1\.[1-5][^0-9]",即搜索字符串后跟一个非数字字符,但这会在行末失败,因为那里没有后续字符。
  • 答案是使用\<\>单词分隔符:

    zegrep -ai "\<10\.85\.1\.[1-5]\>" *.tgz

通过添加前导,\<您可以避免与类似不匹配的情况110.85.1.1

根据您的正则表达式版本,您可能需要使用替代\b单词分隔符:

    zegrep -ai "\b10\.85\.1\.[1-5]\b" *.tgz

相关内容