grep pour plusieurs chaînes dans une seule ligne

Je dois vérifier si l’une des chaînes “Ajouté / Modifié / Fixe / Supprimé” se trouve dans un message de journal de validation. J’écris un hook svn precommit, et le commentaire de validation attendu doit avoir l’une de ces 4 chaînes dans le message.

Le code que j’utilise est comme ci-dessous

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 

Dans le code ci-dessus,

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

me donnera le message de validation que l’utilisateur a entré. Maintenant, je dois vérifier la présence de l’une des chaînes “Ajouté, modifié, corrigé, supprimé” dans le message. C’est,

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

J’ai essayé avec

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

mais cela ne semble pas fonctionner.

Pour utiliser l’alternance, il vous faut Extended Regexp :

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

Ou:

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

Utilisez l’option grep -e (plusieurs fois) comme ceci:

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

sinon allez sur l’itinéraire regex:

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

Supprimez les barres obliques inverses et utilisez egrep Je recommande également -i pour la correspondance insensible à la casse:

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