Grep 不适用于带有 ips 的字符串

Grep 不适用于带有 ips 的字符串

我正在尝试打印文件中的所有以下条目作为我的输出。预期输出如下(具有不同的 ip 地址)

all files calculateTotalcount 0 #211.4.2.10#expctd data flows
all files calculateTotalcount 0 #21.2.2.110#expctd data flows
all files calculateTotalcount 0 #11.44.2.10#expctd data flows
all files calculateTotalcount 0 #1.54.8.10#expctd data flows
 

由于我的字符串有一个空格并且有 ip 地址,所以我按以下格式编写了 grep

grep -o -E 'all files calculateTotalcount 0 #[0-9]*'#expctd data flows'  inputfile > output file

我猜这只适用于数字而不是 IP 地址。有什么建议可以进行哪些修改吗?

答案1

[0-9]*匹配 0 个或多个在 0 到 9 之间排序的字符(其中至少包括 0123456789)。您可以.在其中添加 as in[0-9.]*以添加.到括号表达式匹配的字符列表。

grep -Eo 'all files calculateTotalcount 0 #[0-9.]*#expctd data flows'

或者,如果您只想匹配 IPv4 地址的四进制表示形式,则可以更具体:

grep -Eo 'all files calculateTotalcount 0 #([0-9]+\.){3}[0-9]+#expctd data flows'

或者,您可以不那么具体地指定[^#]*任意数量(包括 0)的字符#(以及换行符,因为grep一次匹配一个行),从而允许 IPv4 地址或 IPv6 地址或主机名的其他表示形式...

相关内容