Ich möchte mit dem Greifen an den Zeilen beginnen, die CK
am Ende der Zeile stehen, und mit dem Greifen aufhören, wenn die Zeile D
am Ende steht. Ich habe es versucht grep "$CK" "$D" file..txt
, aber es hat nicht funktioniert.
Eingang:
kkkkkkkkkkk
jjjjjjjjjjjjjjjjjj
gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D
GGGGGGGGGGGGGG
GGGGGGGGGGGGGG
Die gewünschte Ausgabe:
gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D
text-processing
sed
awk
grep
Rana Khan
quelle
quelle
awk '/\/CK/,/\/D/' input
Wenn Sie BSD verwenden
grep
(unterstützt Perl-Regex-Parameter nicht-P
), ist hier die Problemumgehung:Dies funktioniert, indem alle Zeilen verkettet werden (neue Zeilen werden durch
_
Zeichen ersetzt), das einzeilige Muster überprüft und die Zeilen wieder in ihren ursprünglichen Zustand zurückversetzt werden.Wenn Sie GNU verwenden
grep
, können Sie eine mehrzeilige Übereinstimmung in erzielengrep
, aber Sie müssen perl-regexp fürgrep
(-P
) verwenden, wie in einer anderen Antwort erwähnt . Sie können GNU weiterhingrep
über MacOS installierenbrew install grep
undggrep
stattdessen verwenden.Alternativ können Sie verwenden,
pcregrep
welches mehrzeilige Muster unterstützt (-M
).Sie können auch einen
ex
Befehl verwenden, zB:quelle