J'ai trouvé cela, mais cela suppose que les mots sont des espaces séparés.
data="abcdefADDNAME25abcdefgHELLOabcdefgADDNAME25abcdefgHELLOabcdefg" for word in $data do if echo $word | grep -qi '(ADDNAME\d\d.*HELLO)' then match="$match $word" fi done echo $match
3 Réponses :
Utiliser -O, montrant une correspondance, seule la partie d'un motif de correspondance de ligne p>
blockQuote> grep -o code> p>
7 ans plus tard, c'était exactement ce dont j'avais besoin
réponse originale: strong> p> si vous utilisez Bash version 3.2 ou plus, vous pouvez utiliser sa correspondance de regex. P> Le résultat sera "99 88 42". P> P>
J'ai édité mon message: ma chaîne n'a pas d'espaces, il ne fonctionnera donc pas.
Pourquoi ne pas raccourcir un peu: ... faire; [[$ word = ~ $ motif]] && match = "$ {match: + match} $ {bash_rematch [0]}"; Fini
@ user377178: C'est une question de choix de style et de lisibilité. Choisissez ce qui fonctionne mieux pour une circonstance particulière.
Pourquoi la substitution des paramètres avec la variable "correspondance"? Je ne comprends pas le but de celui-ci.
pas très élégant - et il y a des problèmes en raison de la correspondance gourmande - mais de plus ou moins de travaux: La première boucle échoe trois lignes de données - vous remplacerez probablement cela avec La regex est modifiée avec C'est une bonne démonstration d'utiliser le droit aussi pour le travail. P> p> Cat Code> ou I / O Redirection. Le script
sed code> utilise une regex modifiée pour mettre des espaces autour des motifs. La dernière boucle brise les "mots séparés de l'espace" dans un "mot" par ligne. La finale
grep code> sélectionne les lignes que vous voulez. P>
[AZ] * code> à la place de l'original
. * / code> parce que le motif correspondant est gourmand. Si les données entre Addname et Hello sont non contraries, vous devez penser à utiliser des regex non gourmandes, disponibles en Perl et probablement python et d'autres langages de script modernes: p>
J'ai du mal à avoir du sens de votre script. Est
$ World code> supposé correspondre à
$ résultat code>? Il n'y a rien dans votre modèle qui ne correspondra rien dans
$ World code> cependant. Pouvez-vous montrer un meilleur exemple de la chaîne que vous essayez de correspondre et le modèle que vous essayez d'utiliser?
J'ai édité le poste, il a été mal indiqué.
Il n'est toujours pas clair ce que vous recherchez. Maintenant,
pour Word en $ résultat code> ne voit qu'un "mot" (la chaîne totale contenue dans
résultant code>. Que voulez-vous
$ match code> pour contenir à la fin?
Je veux extraire toutes les occurrences du motif de regex à l'intérieur du var "résultat". Le Var "Match" doit contenir toutes les correspondances extraites chacune séparées par un espace.