You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Grep提取仅第一个八位组为2的子网条目

哦,我明白你的问题了——你遇到的坑出在^锚点的作用范围上!

你的所有子网都挤在同一行里,^2匹配的是整个行的开头,而不是每个子网的开头。因为你的行确实以2开头(第一个子网就是2.1.1.0/24),所以grep直接返回了整行内容,这就是为什么你得到了所有子网,而不是预期的两个。

下面给你两种可行的解决方案:

方法1:用grep的-o选项精准提取匹配项

直接用grep的-o参数(只输出匹配的部分),搭配正则表达式定位每个以2开头的独立子网:

grep -o '\b2\.[0-9]\+\.[0-9]\+\.[0-9]\+/[0-9]\+\b' file

细节解释:

  • -o:强制grep只输出被正则匹配到的片段,而不是整个行
  • \b:单词边界,确保我们匹配的是独立的子网(不会误抓22.6.7.0/24里的开头2)
  • 2\.:明确匹配第一个八位组是2的子网(\.是转义后的点号,避免匹配任意字符)
  • [0-9]\+:匹配一个或多个数字,对应子网剩余的八位组和掩码部分

运行后会输出:

2.1.1.0/24
2.2.2.0/24

如果想把结果合并成一行(用空格分隔),再加个管道到xargs即可:

grep -o '\b2\.[0-9]\+\.[0-9]\+\.[0-9]\+/[0-9]\+\b' file | xargs

方法2:先拆分子网到单独行,再筛选

另一种更直观的思路是先把空格分隔的子网拆成每行一个,再用你最初的筛选逻辑:

tr ' ' '\n' < file | grep '^2\.'

细节解释:

  • tr ' ' '\n' < file:把文件里的空格替换成换行符,让每个子网单独占一行
  • grep '^2\.':现在^匹配的是每行的开头,2\.确保第一个八位组是2,完全符合你的需求

同样,要合并成一行的话,加上xargs:

tr ' ' '\n' < file | grep '^2\.' | xargs

两种方法最终都会输出你想要的结果:2.1.1.0/24 2.2.2.0/24

内容的提问来源于stack exchange,提问作者ph3ro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 00:19:04