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