GNU/Linux >> Tutoriels Linux >  >> Linux

Correspondance de modèle multiligne à l'aide de Sed, Awk ou Grep ?

Cette question a déjà des réponses ici :Comment puis-je "grep" des motifs sur plusieurs lignes ?

(9 réponses)
Fermé il y a 2 ans.

Est-il possible de faire une correspondance de modèle multiligne en utilisant sed , awk ou grep ? Prenons par exemple, je voudrais obtenir toutes les lignes entre { et }

Il devrait donc pouvoir correspondre

 1. {}
 2. {.....}
 3. {.....
.....}

Initialement, la question utilisait <p> par exemple. Modification de la question pour utiliser { et} .

Réponse acceptée :

Bien que je sois d'accord avec le conseil ci-dessus, que vous voudrez obtenir un analyseur pour quelque chose de plus que minuscule ou complètement ad hoc, il est (à peine 😉 possible de faire correspondre des blocs multilignes entre accolades avec sed.

Voici une version de débogage du code sed

sed -n '/[{]/,/[}]/{
    p
    /[}]/a
     end of block matching brace

    }' *.txt

Quelques remarques,

  • -n signifie "aucune ligne d'impression par défaut telle que traitée".
  • ‘p’ signifie maintenant imprimer la ligne.
  • La construction /[{]/,/[}]/ est une expression de plage. Cela signifie scanner jusqu'à ce que vous trouviez quelque chose qui correspond au premier modèle (/[{]/) ET puis scannez jusqu'à ce que vous trouviez le 2ème motif (/[}]/) PUIS effectuez toutes les actions que vous trouvez entre les {} dans le code sed. Dans ce cas, "p" et le code de débogage. (non expliqué ici, utilisez-le, modifiez-le ou retirez-le selon ce qui vous convient le mieux).

Vous pouvez supprimer le débogage de fin de bloc /[}]/a lorsque vous prouvez à votre satisfaction que le code correspond bien aux blocs délimités par {,}.

Cet exemple de code ignorera tout ce qui n'est pas à l'intérieur d'une paire d'accolades.
Il sera, comme d'autres l'ont noté ci-dessus, facilement confus si vous avez des {,} supplémentaires intégrés dans des chaînes, des reg-exps, etc., OU où l'accolade fermante est la même ligne , (avec nos remerciements à fred.bear)

J'espère que cela vous aidera.


Linux
  1. Remplacer le motif une fois que la nième correspondance est trouvée sur chaque ligne ? ?

  2. Sed :imprimer uniquement la première occurrence d'une correspondance de modèle ?

  3. Trouver uniquement la première occurrence en utilisant uniquement Grep ?

  4. Comment puis-je rechercher un motif multiligne dans un fichier ?

  5. Majuscule première lettre de mots à l'aide de SED

Comment effectuer une recherche de modèle dans les fichiers à l'aide de Grep

Comment supprimer des lignes vides dans des fichiers à l'aide de Grep, Sed et Awk

Utiliser grep et sed pour rechercher et remplacer une chaîne

Quelles sont les différences entre grep, awk et sed ?

Afficher la correspondance trouvée ou non en utilisant awk

Utiliser grep contre awk