2009-03-13 6 views
5

Je voudrais obtenir toutes les occurrences de [0-9A-Z]+? pour le traitement plus tard. J'aiComment obtenir tous les résultats de regex?

if [[ `cat file` =~ '[0-9A-Z]+?' ]]; then 
    echo $BASH_REMATCH; 
fi 

Ce qui me donne le premier match, mais comment pourrais-je traiter tous les matches dans le fichier?

Merci

+0

Voulez-vous dire d'ajouter le? à la fin du modèle? – Richard

Répondre

5

Si vous souhaitez obtenir juste le texte correspondant d'une expression régulière, j'utiliser

grep -o 'regex' file 

Dans l'esprit de votre code, je modifierais pour être

while read line; do 
    [[ $line =~ regex ]] || continue 
    # do somethinw with $line or $BASH_REMATCH, perhaps put it in an array. 
done < file 

Si vous voulez faire correspondre plusieurs expressions rationnelles sur la même ligne, voici un moyen. Je suppose que votre regex est censé être un exemple simplifié de ce que vous faites vraiment. Le ? n'est pas utile et vos citations correspondent à une chaîne littérale.

+0

La regex est légèrement plus complexe, +? est nécessaire d'être paresseux. Même si le "while ... done

+0

Que faire si une ligne contient le match regex deux fois? Comment puis-je traiter cela? –

+0

voir la mise à jour –

Questions connexes