2013-03-14 77 views
2

我需要檢查任何字符串「Added/Changed/Fixed/Deleted」是否在提交日誌消息中。我正在編寫一個svn precommit鉤子,並且預期的提交註釋應該在消息中包含這4個字符串中的一個。grep for multiple strings in a single line

我使用的代碼如下

REPOS=$1 
TXN=$2 

SVN="/usr/bin/svn"; 
SVNLOOK="/usr/bin/svnlook"; 

$SVNLOOK log "$REPOS" -t "$TXN" | \ 
grep "[a-zA-Z0-9]" > /dev/null 

GREP_STATUS=$? 
if [ $GREP_STATUS -ne 0 ] 
then 
    "${ECHO}" "No Log comments present" >> "${LOG}" 
    echo "Your commit has been blocked because you didn't give any log message" 1>&2 
    echo "Please write a log message describing the purpose of your changes and" 1>&2 
    echo "then try committing again. -- Thank you" 1>&2 
exit 1 
fi 

在上面的代碼,

$SVNLOOK log "$REPOS" -t "$TXN" 

會給我認爲用戶已經輸入提交信息。現在,我必須檢查消息中是否存在任何字符串「已添加,已更改,已修復,已刪除」。 也就是說,

if (any of the above 4 strings are not present), 
exit 1 

我試着用

$($SVNLOOK log -t "$TXN" "$REPOS" | grep -q "Added\|Changed\|Fixed\|Deleted"|) 

,但它似乎沒有奏效。

+1

「似乎並沒有被工作」是不是表現出的問題,一個非常有用的診斷,請提供一個最小的例子。 – Thor 2013-03-14 09:02:18

回答

4

要使用你需要Extended Regexp交替:

grep -qE 'Added|Changed|Fixed|Deleted' 

或者:

egrep -q 'Added|Changed|Fixed|Deleted' 
+0

使用第一個。有效。謝謝! – ramz 2013-03-14 09:44:30

4

刪除反斜槓和使用egrep我還建議-i不區分大小寫的匹配:

egrep -q -i "added|changed|fixed|deleted" 
+1

'-e'!='-E'並且執行不區分大小寫的匹配可能會產生誤報。 – 2013-03-14 09:02:02

8

使用grep -e選項(多次)這樣的:

grep -e Added -e Changed -e Fixed -e Deleted 

否則轉到正則表達式路線:

grep --regexp=Added|Changed|Fixed|Deleted