Shell 正则表达式匹配和提取字符串

Shell 正则表达式匹配和提取字符串,shell,scripting,sed,awk,Shell,Scripting,Sed,Awk,我有一个包含以下内容的字符串:“Profile--Server FAILUre tESt Exception Type-timeOverThreshold Description-High CPU eHealth Alarm ID-1000001” 我需要在单词描述之后和报警ID之前提取字符串。我在下面的写作中得到了一些帮助,但似乎不起作用。谁能看看这个帮我一下吗。ALARM_TITLE的结果是空白的,我没有看到任何问题,但我肯定在正则表达式中遗漏了一些东西 ALARM_TITLE=$(echo

我有一个包含以下内容的字符串:“
Profile--Server FAILUre tESt Exception Type-timeOverThreshold Description-High CPU eHealth Alarm ID-1000001

我需要在单词描述之后和报警ID之前提取字符串。我在下面的写作中得到了一些帮助,但似乎不起作用。谁能看看这个帮我一下吗。ALARM_TITLE的结果是空白的,我没有看到任何问题,但我肯定在正则表达式中遗漏了一些东西

ALARM_TITLE=$(echo "$EVENTMSG" | sed "s/.*Description - \(.*\) Alarm ID.*/\1/")
测试:

> echo "Profile - -Server-FAILUre-tESt Exception Type - timeOverThreshold Description - High CPU eHealth Alarm ID - 1000001" | sed 's/.*Description\(.*\)Alarm.*$/\1/g'
 - High CPU eHealth 
尝试:

-- 编辑以回应评论:然后重试

ALARM_TITLE=${EVENTMSG% eHealth Alarm ID*}
试试这个:

echo $STRING | grep -oP '(?<=Description - ).*(?=Alarm ID)'

echo$STRING | grep-oP'(?你是说ALARM_TITLE=$(echo“$EVENTMSG”| sed's/*描述(.*)ALARM.$/\1/g))我试过了,我想它也很管用,但只是一个缺口……快速修剪和输出高CPU的eHealth i JS需要高CPU,所以换句话说eHealth ALARM ID*-应该修剪掉
ALARM_TITLE=${EVENTMSG% eHealth Alarm ID*}
echo $STRING | grep -oP '(?<=Description - ).*(?=Alarm ID)'