如何使用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
相关产品推荐
相关产品推荐

