2013-02-18 162 views
0

我寫一個shell腳本,在我需要匹配一些幫助和提取模式正則表達式匹配和提取

ALARM_TYPE contain string 'Exception Type - timeOverThreshold Description - High CPU eHealth Alarm ID - 1000001' 

我需要Description -Alarm ID之前提取字符串,並將其存儲在一個新varaible ...特別是在這個例子中,我正在尋找High CPU eHealth

我該怎麼做只是做awksed工程或任何其他簡單的事情。

回答

1

這裏有你想要使用GNU grep做什麼直譯:

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

或者與sed

var=$(sed 's/.*Description - \(.*\) Alarm ID.*/\1/' file) 

測試:

echo "$var" 

結果:

High CPU eHealth 

你可以閱讀更多有關前瞻與回顧後assersions here。 HTH。

+0

感謝史蒂夫但不是文件中的字符串orignally存儲在一個變量$ ALARM_TYPE,不低於片段看起來不錯 VAR = $(回聲 「$ ALARM_TITLE」 | sed中的/.*描述 - \(。 * \)報警ID。*/\ 1 /'「) – Nik 2013-02-18 08:35:34

+0

任何想法應該如何處理這個... nstead文件字符串被存儲在一個變量$ ALARM_TYPE,下面的代碼片段看起來不錯var = $(回聲「$ ALARM_TITLE」| sed's /.*描述 - (。*)警報ID。*/\ 1 /'「) – Nik 2013-02-18 09:18:08

+0

@Nik:試試這個:var = $(echo」$ alarm_title「| sed's /如果你的shell允許:var = $(sed's /.*描述 - \(。* \)*。* )Alarm ID。*/\ 1 /'<<<「$ alarm_title」)' – Steve 2013-02-18 09:38:40

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