GNU/Linux >> Linux Esercitazione >  >> Linux

Stampa linee tra (e inclusi) due motivi?

Voglio iniziare a grepping dalle righe che hanno CK alla fine della riga e smetti di grepping quando la riga ha D alla fine. Ho provato grep "$CK" "$D" file..txt , ma non ha funzionato.

Inserimento:

kkkkkkkkkkk   
jjjjjjjjjjjjjjjjjj  
gggggggggggg/CK  
JHGHHHHHHHH   
HJKHKKLKLLL   
JNBHBHJKJJLKKL  
JLKKKLLKJLKJ/D  
GGGGGGGGGGGGGG  
GGGGGGGGGGGGGG

L'output desiderato:

gggggggggggg/CK  
JHGHHHHHHHH   
HJKHKKLKLLL   
JNBHBHJKJJLKKL  
JLKKKLLKJLKJ/D

Risposta accettata:

È meglio usare awk o sed

awk '/CK$/,/D$/' file.txt

O

sed -n '/CK$/,/D$/p' file.txt

Se insisti su grep, ecco un modo GNU grep

grep -oPz '(?s)(?<=n)N+CKn.*?D(?=n)' file.txt

Qui

-P attiva perl-regexp

-z imposta il separatore di riga su NUL. Questo costringe grep a vedere l'intero file come una singola riga

-o stampa solo corrispondente

(?s) attiva PCRE_DOTALL, quindi . trova qualsiasi carattere o nuova riga

N corrisponde a qualsiasi cosa tranne una nuova riga

.*? trova. in modalità non avida

(?<=..) è un'affermazione a distanza

(?=..) è un'affermazione anticipata


Linux
  1. Stampa linee tra (ed escludendo) due motivi?

  2. Come rimuovere le righe vuote da un file (inclusi tabulazione e spazi)?

  3. La differenza tra .exrc e .vimrc?

  4. Linee comuni tra due file?

  5. Differenza tra file di dispositivo e driver di dispositivo

Come eliminare le righe vuote nei file utilizzando Grep, Sed e Awk

Esercitazione Unix Sed:stampa di righe di file utilizzando l'indirizzo e i modelli

Esercitazione Unix Sed:Elimina le righe di file utilizzando l'indirizzo e i modelli

Come condividere file tra Ubuntu e Windows 10?

Modificare l'ordine delle righe in un file

grep coppie di modelli e file