Quiero comenzar a hacer grepping desde las líneas que tienen CK al final de la línea y deja de hacer grepping cuando la línea tiene D al final. Probé el archivo grep "$CK" "$D" file..txt , pero no funcionó.
Entrada:
kkkkkkkkkkk
jjjjjjjjjjjjjjjjjj
gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D
GGGGGGGGGGGGGG
GGGGGGGGGGGGGG
La salida deseada:
gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D
Respuesta aceptada:
Es mejor usar awk o sed
awk '/CK$/,/D$/' file.txt
O
sed -n '/CK$/,/D$/p' file.txt
Si insiste en grep, aquí hay una forma de GNU grep
grep -oPz '(?s)(?<=n)N+CKn.*?D(?=n)' file.txt
Aquí
-P activa perl-regexp
-z establece el separador de línea en NUL. Esto obliga a grep a ver todo el archivo como una sola línea
-o impresiones solo coincidentes
(?s) activa PCRE_DOTALL, entonces . encuentra cualquier carácter o salto de línea
N coincide con cualquier cosa excepto nueva línea
.*? encuentra en modo no codicioso
(?<=..) es una afirmación retrospectiva
(?=..) es una afirmación anticipada