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