Ich möchte mit dem Grepping aus den Zeilen mit CK
beginnen am Ende der Zeile und stoppen Sie das Grepping, wenn die Zeile D
hat Am Ende. Ich habe versucht grep "$CK" "$D" file..txt
, aber es hat nicht funktioniert.
Eingabe:
kkkkkkkkkkk
jjjjjjjjjjjjjjjjjj
gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D
GGGGGGGGGGGGGG
GGGGGGGGGGGGGG
Die gewünschte Ausgabe:
gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D
Akzeptierte Antwort:
Verwenden Sie besser awk oder sed
awk '/CK$/,/D$/' file.txt
ODER
sed -n '/CK$/,/D$/p' file.txt
Wenn Sie auf grep bestehen, finden Sie hier einen GNU-Grep-Weg
grep -oPz '(?s)(?<=n)N+CKn.*?D(?=n)' file.txt
Hier
-P
aktiviert perl-regexp
-z
setzt den Zeilentrenner auf NUL. Dies zwingt grep, die gesamte Datei als eine einzige Zeile zu sehen
-o
druckt nur übereinstimmende
(?s)
aktiviert PCRE_DOTALL, also .
findet alle Zeichen oder Zeilenumbrüche
N
passt auf alles außer newline
.*?
findet . im Non-Greedy-Modus
(?<=..)
ist eine Look-Behind-Assertion
(?=..)
ist eine vorausschauende Assertion