提取 2 个不同匹配项之间的文本

MO1*_*O12 6 linux sed awk

我正在尝试在特定的第一个匹配(_ 和 -)之间提取文本。例如,我需要从下面得到数字 5:

MQSeriesRuntime_5-U200491-7.5.0-4.x86_64
Run Code Online (Sandbox Code Playgroud)

我尝试了 awk 字段分隔符(awk -F),但这让我在 _ 之后得到了整个文本。

Dop*_*oti 8

你只需要对你的字段分隔符有创意:

$ awk 'BEGIN {FS="_|-"} {print $2}' input
5
Run Code Online (Sandbox Code Playgroud)

诀窍FS在于它不是一个字符串;这是一个正则表达式。

根据您的要求在下面进行更全面的解释:

一个awk脚本可以定义名为码块BEGIN的任何输入数据的处理之前,其执行。

我使用此代码块FS使用正则表达式作为连字符 ( -) 或下划线 ( _)来定义字段分隔符( )。

下一个代码块{print $2}将打印第二个字段(即由迄今为止的分隔符分隔的第二个字符串/-|_/),这就是5您要查找的字段。一个没有前缀的代码块将针对由 读取的每条记录执行awk