Shell 正则表达式匹配与提取

Shell 正则表达式匹配与提取,shell,scripting,sed,awk,Shell,Scripting,Sed,Awk,我正在写一个shell脚本,在这里我需要一些匹配和提取模式的帮助 ALARM_TYPE contain string 'Exception Type - timeOverThreshold Description - High CPU eHealth Alarm ID - 1000001' 我需要在Description-之后和Alarm ID之前提取字符串,并将其存储在一个新的变量中…特别是在本例中,我要寻找的是高CPU eHealth 我该怎么做呢?awk,sed工作或任何其他简单的事情。

我正在写一个shell脚本,在这里我需要一些匹配和提取模式的帮助

ALARM_TYPE contain string 'Exception Type - timeOverThreshold Description - High CPU eHealth Alarm ID - 1000001'
我需要在
Description-
之后和
Alarm ID
之前提取字符串,并将其存储在一个新的变量中…特别是在本例中,我要寻找的是
高CPU eHealth


我该怎么做呢?
awk
sed
工作或任何其他简单的事情。

以下是您使用
GNU grep
要做的事情的直译:

var=$(grep -oP "(?<=Description - ).*(?= Alarm ID)" file)
测试:

结果:

High CPU eHealth


您可以阅读更多有关“向前看”和“向后看”评估的信息。HTH.

谢谢Steve,但是字符串不是原始存储在变量$ALARM_类型中的文件,而是下面的代码段看起来很好的var=$(echo“$ALARM_TITLE”| sed's/*Description-(*)ALARM ID./\1/'))。知道我应该如何处理这个问题吗?文件开头的字符串是原始存储在变量$ALARM_类型中的,下面的代码段看起来很好吗=$(echo“$ALARM\u TITLE”| sed's/*Description-(.*)报警ID./\1/'”@Nik:试试这个:
var=$(echo“$ALARM\u TITLE”| sed's/*Description-\(.*)报警ID./\1/')
或者如果shell允许,使用here字符串:
var=$(sed's/*Description-\(.)Alarm ID./\1/'@Nik-文本存储在其中的变量的名称是什么?您说的是Alarm_TYPE,但在这里的示例中使用了Alarm_TITLE,然后使用第三个变量打开了一个全新的问题。另外-复制/粘贴steve告诉您的内容,不要尝试重新键入,因为看起来您把它弄糟了。谢谢您的回复,steve。我尝试了这个var=$(echo“$alarm_title”| sed's/*Description-(*)alarm ID.*/\1/'),但它在var中传递整个字符串alarm_title,所以var的输出是$alarm_title,而不仅仅是高CPU
echo "$var"
High CPU eHealth
sed 's/.*Description\(.*\)Alarm.*$/\1/g'