2013-03-14 2 views
2

"Added/Changed/Fixed/Deleted"문자열이 커밋 로그 메시지에 있는지 확인해야합니다. svn precommit 후크를 쓰고 있는데 예상 된 커밋 주석은 메시지에서이 4 개의 문자열 중 하나를 가져야합니다.한 줄에 여러 문자열을 사용하는 grep

내가 사용하고있는 코드는

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

나에게 사용자가 입력 한 메시지를 저지를 줄 것이다, 위의 코드에서

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 

다음과 같다. 이제 메시지에 "Added, Changed, Fixed, Deleted"문자열이 있는지 확인해야합니다. 이다 ,

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

나는

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

으로 시도했지만 작동이있을 것 같지 않습니다. 이 같은

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

"작동하지 않는 것"이 ​​문제를 전시 매우 유용한 진단, 제공하시기 바랍니다 최소한의 예가 아니다. – Thor

답변

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

또는 :당신이 Extended Regexp 필요 교대를 사용하기 위해

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

첫 번째 것을 사용했습니다. 그것은 효과가 있었다. 감사! – ramz

4

나는 또한 대소 문자를 구분 매칭 -i 추천 백 슬래시를 제거하고 egrep를 사용

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

그렇지 않으면 정규식 경로로 이동합니다 :

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

'-e'! ='-E'이며 대소 문자를 구분하지 않으면 일치가 잘못 될 수 있습니다. –

8

사용 grep -e 옵션 (여러 번) :

관련 문제