Chcę zacząć grepowanie od linii, które mają CK
na końcu linii, a przestać grepowanie, gdy linia ma D
na końcu. Próbowałem grep "$CK" "$D" file..txt
, ale to nie zadziałało.
Wejście:
kkkkkkkkkkk
jjjjjjjjjjjjjjjjjj
gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D
GGGGGGGGGGGGGG
GGGGGGGGGGGGGG
Pożądana moc wyjściowa:
gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D
text-processing
sed
awk
grep
Rana Khan
źródło
źródło
awk '/\/CK/,/\/D/' input
Jeśli używasz BSD
grep
(nie obsługuje parametru wyrażenia regularnego perl-P
), oto obejście:Działa to poprzez połączenie wszystkich linii (zastąpienie nowych linii
_
znakiem), sprawdzenie wzoru jednowierszowego i rozwinięcie linii z powrotem do pierwotnego stanu.Jeśli używasz GNU
grep
, możesz osiągnąć dopasowanie wieloliniowegrep
, ale musisz użyć perl-regexp dlagrep
(-P
), jak wspomniano w innej odpowiedzi . Nadal możesz zainstalować GNUgrep
na macOS za pomocąbrew install grep
iggrep
zamiast tego użyj .Alternatywnie możesz użyć,
pcregrep
który obsługuje wzorce wieloliniowe (-M
).Możesz także użyć
ex
polecenia, np .:źródło