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 pourquoi
abc 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 avant
déf2 code> une occurrence de
ABC CODE> Y a-t-il ce qui n'est pas fermé et encore un
ABC 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> et
mno 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> et
jkl2 code> entre
abc code> et
mno 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ù tout
abc code> est suivi d'un autre
ABC CODE> et
MON CODE> Dans ce cycle est manquant à ce moment-là, ces éléments provenant de 2
ABC 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.