2013-04-16 50 views
0

$ SQL_RESULT通常是這樣的:正則表達式匹配來砸4(解析從SQL輸出)

TDM_PROC 
------------------------------------------------------------------- 
N 

我需要從中提取的最後一個字時(在這種情況下)。

在bash 3.2我用這個表達式:

if [[ $SQL_RESULT =~ "(\w+)$" ]] ; then 
    RES=${BASH_REMATCH[1]} 
else 
    echo "Error" > $LOG_FILE 
    exit 1 
fi 

我發現,在bash 4我不應該使用引號,但它仍然無法正常工作

if [[ $SQL_RESULT =~ (\w+)$ ]] ; then 
    RES=${BASH_REMATCH[1]} 
else 
    echo "Error" > $LOG_FILE 
    exit 1 
fi 

讚賞任何幫助。

+0

請準確輸入bash版本(bash --version) – Carlo

回答

0

以下適用於我的bash 4.0。請注意,我已使用$'\n'(..)組之前指定換行符。此外,我與.

if [[ $SQL_RESULT =~ ^.*$'\n'(.+?)$ ]]; then RES=${BASH_REMATCH[1]}; else echo ' 

沒有「取代\w;下面的BASH外殼選項網絡

echo $RES 
N 
2

用途:

shopt -s compat31 

,允許在正則表達式匹配報價。通過以上選項設置,您可以按照常規方式進行操作:

if [[ $SQL_RESULT =~ "([A-Za-z0-9_]+)$" ]] ; then 
    RES=${BASH_REMATCH[1]} 
else 
    echo "Error" > $LOG_FILE 
    exit 1 
fi