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

时间:2013-02-18 09:42:26

标签: shell scripting sed awk

我有一个包含“Profile - -Server-FAILUre-tESt Exception Type - timeOverThreshold Description - High CPU eHealth Alarm ID - 1000001

等内容的字符串

我需要在单词Description和Alarm ID之前提取字符串。我在下面写了一些帮助,但似乎没有用。有人可以看看这个并帮助我。 ALARM_TITLE的结果是空白的,我没有看到任何问题,但我肯定在正则表达式中遗漏了一些东西。

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

3 个答案:

答案 0 :(得分:1)

sed 's/.*Description\(.*\)Alarm.*$/\1/g'

测试:

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

答案 1 :(得分:1)

试试这个:

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

这使用了前瞻和后瞻断言。

答案 2 :(得分:0)

尝试:

ALARM_TITLE=${EVENTMSG% Alarm ID*}
ALARM_TITLE=${ALARM_TITLE#*Description - }

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

ALARM_TITLE=${EVENTMSG% eHealth Alarm ID*}