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