2009-11-21 6 views
2

J'ai deux variables, une avec le texte, et l'autre avec les motifs. Et je veux filtrer les lignes, les motifs correspondants. Comment puis je faire ça?Filtrer les lignes par motif dans le script bash

Mon script ressemble à ceci

# get ignore files list 
IGNORE=`cat ignore.txt` 

# get changed files list 
CHANGED=`git diff --name-only $LAST_COMMIT HEAD` 

# remove files, that should be ignored from change list 
for IG in $IGNORE; do 
    echo $CHANGED 
    $CHANGED=`cat $CHANGED | grep -v $IG` 
done 

Répondre

3

Vous pouvez fournir le fichier de configuration directement à grep

# get changed files list and remove files that should be ignored 
CHANGED=$(git diff --name-only $LAST_COMMIT HEAD | grep -vf ignore.txt) 
echo $CHANGED 

(je recommande d'utiliser $() au lieu de contre-apostrophes.)


Par le chemin, cette ligne:

$CHANGED=`cat $CHANGED | grep -v $IG` 

devrait probablement ressembler à ceci:

CHANGED=`echo $CHANGED | grep -v $IG` 

si vous allez le garder.

+0

Oui, merci. C'est une bonne idée de fournir directement le fichier pattern à grep. – AlexLocust

0
# Disable globbing 
set -f 
# Collect variables 
IGNORE=$(cat ignore.txt) 
CHANGED=$(...) 

# Apply each pattern in turn 
for pattern in $IGNORE 
do 
    # Reset the current list of candidates 
    CANDIDATES= 
    for candidate in $CHANGED 
    do 
     # Apply the pattern 
     CANDIDATES="$CANDIDATES ${candidate%$pattern}" 
    done 
    # Update the CHANGED list 
    CHANGED=$CANDIDATES 
done 
+0

Afin d'éviter de générer un processus, vous pouvez faire 'IGNORE = $ (

Questions connexes