我试图在一个巨大的数据包捕获文件中找到某个未知的 11 个字符序列。我确实知道的一件事是我正在查找的字符串具有 format x.x-xxxxxxx
。我一直在寻找一段时间,但找不到正确的 grep 语句来完成此任务,有人可以帮忙吗?
答案1
其格式grep
就是我们所说的“POSIX 正则表达式”(查找),它支持一些简单的匹配原语。如果您知道只需要字母数字字符,则可以使用如下字符类:[a-zA-Z0-9]
。grep
甚至有这个特定类的快捷方式(因为它非常有用),如下所示:[[:alnum:]]
。man grep
有很多相关信息。
您还可以使用重复计数来指定要匹配的字符数量。在您的情况下,您想要匹配:1 个字母数字字符,然后是一个句点,然后是一个字符,然后是一个破折号,后跟 7 个字符。在 POSIX 正则表达式中,这看起来像这样:
[[:alnum:]]\.[[:alnum:]]-[[:alnum:]]{7}
笔记:
- 我必须用反斜杠转义句点,否则它将被解析为“捕获所有字符”正则表达式。
- 为了使重复子句(花括号)起作用,您需要使用
-e
或运行egrep
而不是标准的grep
.
所以完整的命令可能如下所示:
egrep '[[:alnum:]]\.[[:alnum:]]-[[:alnum:]]{7}' /some/file
输出将是该表达式匹配的行,可能以颜色突出显示(取决于您的终端)。如果您的数据包文件不是行分隔的(可能是二进制的),则屏幕上会出现很多混乱。