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