我需要过滤一个文件中的 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