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

如何使用awk、sed提取两个特定单词间的文本?附OFED示例

用awk或sed提取特定单词间文本的实用方案

针对你给出的ofed_info输出场景,我整理了两种简单直接的方法来提取目标版本号4.1-1.0.2.0:

方法一:使用awk

awk的match函数可以轻松捕获正则匹配的分组内容,非常适合这种场景:

ofed_info | awk '/MLNX_OFED_LINUX/{match($0, /MLNX_OFED_LINUX-([0-9.-]+)/, result); print result[1]}'

逻辑解释:

  • /MLNX_OFED_LINUX/:先过滤出包含目标关键词的行
  • match($0, /MLNX_OFED_LINUX-([0-9.-]+)/, result):用正则匹配整行,其中([0-9.-]+)是我们要捕获的版本号(匹配数字、点和横杠),结果存到result数组里
  • print result[1]:打印捕获到的第一个分组内容,也就是目标版本号

方法二:使用sed

sed的替换命令结合正则捕获组也能快速实现提取:

ofed_info | sed -n '/MLNX_OFED_LINUX/s/.*MLNX_OFED_LINUX-\([0-9.-]*\).*/\1/p'

逻辑解释:

  • -n:默认不输出任何行,只处理匹配的内容
  • /MLNX_OFED_LINUX/:定位到包含关键词的行
  • s/.*MLNX_OFED_LINUX-\([0-9.-]*\).*/\1/p:把整行内容替换成MLNX_OFED_LINUX-之后的版本号部分(\1对应正则里捕获的分组),最后p打印替换后的结果

如果你的场景需要更通用的"两个任意单词之间"提取,只需要调整正则里的前后边界即可。比如假设要提取START和END之间的内容,正则可以改成对应边界的匹配规则(sed里的捕获括号需要转义,awk则不需要)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:48:53