0
votes

Utiliser Grep pour correspondre à toute combinaison entre les sous-chaînes

J'ai des chaînes de canalistes qui sont dans le sens de: xxx

où je veux que mon grep émet tout le début de "enzyme" à la fin de la deuxième double citation, quelle que soit la valeur ou la quantité de ce qui se situe entre les deux doubles citations (peut être de 1 à 20 enzymes et je ne connais pas leurs valeurs). Les enzymes sont toujours majuscules alpha, mais si plus d'une, il y a toujours un espace entre les deux.

J'ai essayé: xxx

, mais Aucun de ces éléments ne rien retourner. Je serais reconnaissant pour toutes les idées d'obtenir ce que je veux. Merci!


1 commentaires

Pourquoi utiliser des guillemets doubles en citations doubles? Utilisez des singles comme extérieur. Le 1er n'a pas besoin de parens. Les 2e et 3ème match ne correspondent que d'un seul caractère et non d'espaces ... Le 4ème est un globe globale et non une regex à moins que vous ne veux pas correspondre à des chaînes de guillemets ...


4 Réponses :


0
votes

Ceci est en train de vérifier Enzyme: suivi de zéro ou plusieurs espaces blancs suivis de " jusqu'à la prochaine " est vu.

Utilisation de -E drapeau: xxx

avec -p drapeau: xxx


0 commentaires

0
votes
grep -o 'Enzyme: ?"[^"]+"'
Match Enzyme: literally, followed by an optional space, a literal double quote, anything that's not a double quote, and a literal double quote.

0 commentaires

0
votes

Grep génère toujours tout le match, qui inclut l'enzyme d'Ankers: "" et "" " Pour faire correspondre les ankers, mais omettez-les dans la sortie, vous devez utiliser un lookeDeHind postif avec le préfixe et un lookahead positive avec le postfix de votre sortie souhaitée:

grep -oe "(? <= enzyme: \") (. *) (? = \ ")"

Pour tester: Echo 'Enzyme: "ENZ3 ENZ6 ENZ12 ENZ19"' | grep -op "(? <= Enzyme: \") (. *) (? = \ ")"

Cela dit, je trouve qu'il est beaucoup plus facile d'utiliser SED dans ce cas: Echo 'Enzyme: "ENZ3 ENZ6 ENZ12 ENZ19"' | Sed -r "s / enzyme: \" (. *) \ "/ \ 1 / g"

s / trouvaille / remplacer / est la commande de recherche et de remplacement de SED


2 commentaires

Selon mon MANPAGE -P, n'est que expérimental avec -z. En dehors de cela, vous êtes correct, je modifierai la réponse


D'autre part sans que les accolades ont besoin d'échapper à qui, à mon avis, rend l'expression surtout illisible



0
votes

Pour ce faire avec Grep, vous auriez besoin de GNU Grep pour -o : xxx

sinon, en utilisant n'importe quel SED dans n'importe quelle coquille sur chaque boîte Unix: < / p> xxx


0 commentaires