Supposons qu'un fichier contienne: et le motif de démarrage est ABC et le motif de fin est MNO, j'ai besoin de la sortie comme suit: P> def2
ghi2
jkl2
3 Réponses :
Si vous divisez l'entrée sur ABC \ N CODE> Vous pouvez vous éloigner de supprimer ceux qui contiennent mno code>, par exemple. avec GNU AWK: def2
ghi2
jkl2
Ceci est une extension GNU awk. Dans POSIX AWK, la variable RS code> ne peut être qu'un seul caractère.
Cela échouera si mno code> apparaît avant le premier abc code>
@ Kvantour: J'ai explicitement mentionné GNU AWK et cela fonctionne avec l'exemple fourni par le PO, bien qu'il ne soit pas clair ce qu'il veut vraiment
Ceci pourrait fonctionner pour vous (GNU SED):
sed -n '/abc/{:a;x;z;x;:b;n;/abc/{:c;g;s/.//p;ba};/mno/d;H;$bc;bb};p' file
Voici un moyen simple de le faire qui fonctionne avec n'importe quel AWK:
from\to | begpat | endpat | END BEGIN: BEGIN OF FILE
--------+--------+--------+----- END : END OF FILE
BEGIN | 1 | 1 | 1
--------+--------+--------+----- 1: print lines between [from,to]
begpat | 1 | 0 | 1 0: don't print lines between [from,to]
--------+--------+--------+-----
endpat | 1 | 1 | 1
La cinquième ligne est-elle une erreur? Si tel est le cas, un fichier simple
sed '/ ^ ABC $ /, / ^ mno $ / d' fichier code> fonctionnera. Si non, expliquez pourquoiabc code> n'est pas en sortie@Sundeep, monsieur si cela ne vous dérangeait pas que je ne disais que ce que je pense, la sortie vient comme
déf2 ghi2 jkl2 code> car juste avantdéf2 code> une occurrence deABC CODE> Y a-t-il ce qui n'est pas fermé et encore unABC code> est arrivé après elle, IMHO C'est pourquoi OP veut l'imprimer, mais OP ne pourrait confirmer cela.Re " Tout entre ABC et MNO doit être supprimé i>", les lignes que vous avez demandé à conserver sont entre
abc code> etmno code> ...Aucune ligne 5ème n'est pas une erreur. Je veux quelque chose après ABC, y compris ABC si cela n'est pas fini par MNO.
@Anupamdas, EAxclty, c'est ce que j'ai essayé d'expliquer ci-dessus. S'il vous plaît changer votre question et le rendre plus clair.
@ikegami non je veux des lignes entre ABC et MNO à enlever
déf2 code>,ghi2 code> etjkl2 code> entreabc code> etmno code>, mais vous avez dit que vous avez dit que vous avez dit voulait les garder@ikegami, IMHO, quel op de dire son cycle (de
abc code> àmno code>) au cas où toutabc code> est suivi d'un autreABC CODE> etMON CODE> Dans ce cycle est manquant à ce moment-là, ces éléments provenant de 2ABC code> S doivent être imprimés.@ Ravindersingh13, c'est la même vue que je prends. Il y a deux cycles et l'intégralité du fichier.