GNU/Linux >> Tutoriales Linux >  >> Linux

¿Imprimir líneas entre (e incluyendo) dos patrones?

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


Linux
  1. ¿Imprimir líneas entre (y excluyendo) dos patrones?

  2. ¿Cómo imprimir las líneas número 15 y 25 de cada 50 líneas?

  3. ¿La diferencia entre .exrc y .vimrc?

  4. ¿Líneas comunes entre dos archivos?

  5. ¿Imprimir el contenido del archivo sin la primera y la última línea?

Cómo eliminar líneas vacías en archivos usando Grep, Sed y Awk

Tutorial de Unix Sed:Impresión de líneas de archivos usando direcciones y patrones

Tutorial de Unix Sed:eliminar líneas de archivos usando direcciones y patrones

¿Cómo compartir archivos entre Ubuntu y Windows 10?

Cambiar el orden de las líneas en un archivo

grep pares de patrones y archivo