Comment extraire des lignes entre deux délimiteurs de lignes dans Perl?
J'ai un ASCII fichier journal avec un peu de contenu, je voudrais extraire. Je n'ai jamais pris le temps d'apprendre le Perl correctement, mais je suppose que c'est un bon outil pour cette tâche.
Le fichier est structuré comme suit:
... certaines des ordures ... ... ... des ordures DÉBUT ce que je veux, c'est sur les différents lignes FIN ... ... plus d'ordures ... prochain DÉPART plus de choses que je veux, encore une fois propagation par le biais de plusieurs lignes FIN ... plus d'ordures
Donc, je suis à la recherche d'un moyen d'extraire les lignes entre chaque START
et END
délimiteur de chaînes.
Comment puis-je faire cela?
Jusqu'à présent, je n'ai trouvé quelques exemples sur la façon d'imprimer une ligne avec la START
chaîne, ou d'autres documents qui sont un peu en rapport avec ce que je suis à la recherche d'.
source d'informationauteur jbatista
Vous devez vous connecter pour publier un commentaire.
Vous voulez le flip-flop de l'opérateur (mieux connu sous le nom de l'opérateur d'intervalle)
..
Remplacer l'appel à
print
avec tout ce que vous voulez vraiment faire (par exemple, pousser la ligne dans un tableau, modifier, mettre en forme, peu importe). Je suisnext
-ing passé les lignes qui ont réellementSTART
ouEND
mais vous ne voudrez pas que le comportement. Voir cet article pour une discussion de cet opérateur, et d'autres utiles Perl variables spéciales.De perlfaq6's réponse à Comment puis-je tirer des lignes entre les deux modèles qui sont eux-mêmes sur des lignes différentes?
Vous pouvez utiliser Perl est un peu exotique .. opérateur (documentées dans perlop):
Si vous voulez du texte et pas de lignes, vous pouvez utiliser
Mais si vous voulez imbriqués les occurrences de COMMENCER par la FIN, vous allez lancer contre le problème décrit dans la question, dans cette section sur la correspondance de texte équilibré.
Voici un autre exemple d'utilisation ..:
Comment puis-je saisir plusieurs lignes après une correspondance de ligne en Perl?
Comment est-ce? Dans celui-ci, à la FIN de la chaîne $^, vous pouvez le changer à la FIN de votre chaîne.
Je suis aussi un débutant, mais les solutions de fournir quelques méthodes... permettez-moi de savoir plus précisément ce que vous voulez qui diffère le lien ci-dessus.
essayer d'écrire un peu de code pour une prochaine fois
Après Télémaque réponse, les choses ont commencé à couler. Cela fonctionne comme la solution, je suis à la recherche d', après tout.
Cela fonctionne pour moi, bien que le code peut être classé comme laid; c'est parce que je suis actuellement un presque nouveau venu à Perl. De toute façon, va ici:
J'espère qu'elle profite à d'autres.
Des acclamations.
Pas trop mal pour venir à partir d'un "virtuel newcommer". Une chose que vous pourriez faire, c'est mettre "$trouve=1" à l'intérieur de la "si($trouve == 0)" bloc de sorte que vous ne faites pas d'affectation à chaque fois entre $de début et de $arrêter.
Autre chose qui est un peu moche, à mon avis, c'est que vous ouvrez le même filehandler chaque fois que vous entrez dans l' $start/$stop-bloc.
Cela montre un moyen de contourner cela: