grep一行中有多个字符串

时间:2013-03-14 08:51:22

标签: shell unix grep pre-commit-hook

我需要检查“添加/更改/修复/删除”字符串是否在提交日志消息中。我正在编写一个svn precommit钩子,并且预期的提交注释应该在消息中包含这4个字符串中的一个。

我使用的代码如下

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"|)

但它似乎没有起作用。

3 个答案:

答案 0 :(得分:8)

使用grep -e选项(多次),如下所示:

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

否则转到正则表达式路线:

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

答案 1 :(得分:5)

要使用替换,您需要Extended Regexp

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

或者:

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

答案 2 :(得分:4)

删除反斜杠并使用egrep我还建议使用-i进行不区分大小写的匹配:

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