GNU/Linux >> Tutoriels Linux >  >> Linux

Imprimer des lignes entre (et y compris) deux motifs ?

Je veux commencer à gripper à partir des lignes qui ont CK en fin de ligne et arrêtez de grappiller lorsque la ligne a D à la fin. J'ai essayé grep "$CK" "$D" file..txt , mais cela n'a pas fonctionné.

Entrée :

kkkkkkkkkkk   
jjjjjjjjjjjjjjjjjj  
gggggggggggg/CK  
JHGHHHHHHHH   
HJKHKKLKLLL   
JNBHBHJKJJLKKL  
JLKKKLLKJLKJ/D  
GGGGGGGGGGGGGG  
GGGGGGGGGGGGGG

La sortie souhaitée :

gggggggggggg/CK  
JHGHHHHHHHH   
HJKHKKLKLLL   
JNBHBHJKJJLKKL  
JLKKKLLKJLKJ/D

Réponse acceptée :

Vous feriez mieux d'utiliser awk ou sed

awk '/CK$/,/D$/' file.txt

OU

sed -n '/CK$/,/D$/p' file.txt

Si vous insistez sur grep, voici une méthode grep GNU

grep -oPz '(?s)(?<=n)N+CKn.*?D(?=n)' file.txt

Ici

-P active perl-regexp

-z définit le séparateur de ligne sur NUL. Cela force grep à voir le fichier entier comme une seule ligne

-o imprime seulement correspondant

(?s) active PCRE_DOTALL, donc . trouve n'importe quel caractère ou retour à la ligne

N correspond à tout sauf à la nouvelle ligne

.*? trouve. en mode non gourmand

(?<=..) est une affirmation rétrospective

(?=..) est une assertion anticipée


Linux
  1. Comment sélectionner la première occurrence entre deux modèles les incluant ?

  2. Comment supprimer les lignes vides d'un fichier (y compris les tabulations et les espaces) ?

  3. Extraire la valeur entre deux modèles de recherche sur la même ligne ?

  4. La différence entre .exrc et .vimrc ?

  5. Lignes communes entre deux fichiers ?

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

Tutoriel Unix Sed :Impression de lignes de fichier à l'aide d'adresses et de modèles

Tutoriel Unix Sed :Supprimer des lignes de fichier à l'aide d'adresses et de modèles

Comment partager un fichier entre Ubuntu et Windows 10 ?

Changer l'ordre des lignes dans un fichier

grep paires de motifs et fichier