0
votes

Texte de sortie entre deux modèles d'expression réguliers sur plusieurs lignes

Je peux exécuter la commande suivante si j'apporte myfile à un environnement avec Python disponible: xxx

filtre.py xxx

mais l'environnement que je veux exécuter cela n'a pas de python. Mon seul choix de convertir cela en Perl, que je connais existe dans l'environnement? Y a-t-il une commande Easy SED ou AWK pour faire cela?

J'ai essayé ce qui suit, mais cela ne me donne pas tout à fait ce que je cherche car il manque les +/- 4 lignes: < / p> xxx

[EDIT: Le script Python dit lignes_to_include_after_end_match est 4 mais en réalité, il retourne 3]


0 commentaires

3 Réponses :


0
votes

étant donné que les terminaisons de ligne sont \ n , vous pouvez essayer ceci: xxx

notez que la marque nécessite 6 si vous voulez imprimer des lignes supplémentaires 4 après le Match de fin.
Je pense que votre propre code Python n'imprimera que 3 autres lignes après la fin de la correspondance.

placé dans plusieurs lignes pour la redabilication: xxx


5 commentaires

Oui tu as raison. Mon script Python ne devrait imprimer que 3 lignes, ce que je voulais cela. Je vais mettre à jour le message original à noter que.


J'ai essayé la commande awk mais il semble que cela ressemble à renvoyer les lignes P-1 suivantes après avoir trouvé "du texte", puis les 3 lignes avant la première instance de "un autre texte". J'espérais avoir les 4 lignes avant "du texte", tout le texte entre "un texte" et la première instance de "un autre texte" après cette instance de "Quelque texte" et les 3 prochaines lignes après " texte"


Oui, il existe plusieurs instances de du texte et d'autres texte .


AWK version 20070501


@Joel mis à jour. Essayez à nouveau s'il vous plaît, voyez si cela fonctionne comme prévu.



0
votes

Ceci pourrait fonctionner pour vous (GNU SED):

sed ':a;$!{N;s/\n/&/4;Ta};/^start/M{:b;n;/end$/M!bb;:c;N;s/\n/&/4;Tc;b};$d;D' file


0 commentaires

0
votes

avec sed code>, veuillez essayer:

sed -n "$(($(sed -n '/some text/=' myfile) - 4)),\$p" myfile | sed "/some other text/{N;N;N;q}"
  • la commande sed -n '/ certains texte / =' code> renvoie le numéro de ligne qui correspond à du texte code>. li>.
  • alors 4 est soustrait du nombre ci-dessus. LI>
  • La partie suivante sed -n '/ un autre texte / =' code> fonctionne de la même manière et le numéro de ligne obtenu est ajouté par 4. Li> ul>

    Notez que le script scanne le fichier d'entrée trois fois et peut ne pas être approprié pour le temps d'exécution de cas est crucial. p>

    [EDIT] P> P> Si vous Avoir plusieurs "un autre texte" code> dans le fichier, essayez plutôt: p> xxx pré> p>


2 commentaires

Bien que je pense que cette approche est assez intelligente, la question avec ce «autre texte» apparaît plusieurs fois dans le fichier et je souhaite saisir uniquement le texte entre «Quelque texte» (y compris les 4 lignes précédentes) et la première instance de «certains autre texte "(y compris les 3 prochaines lignes).


Hmm .. Je me suis inquiété d'une telle possibilité :). J'ai mis à jour ma réponse. Souhaitez-vous l'essayer?