Je veux commencer la grepping à partir des lignes qui ont CK
à la fin de la ligne et arrêter la grepping lorsque la ligne a D
à la fin. J'ai essayé grep "$CK" "$D" file..txt
, mais ça n'a pas marché.
Contribution:
kkkkkkkkkkk
jjjjjjjjjjjjjjjjjj
gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D
GGGGGGGGGGGGGG
GGGGGGGGGGGGGG
La sortie souhaitée:
gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D
text-processing
sed
awk
grep
Rana Khan
la source
la source
awk '/\/CK/,/\/D/' input
Si vous utilisez BSD
grep
(ne prend pas en charge les paramètres perge regex-P
), voici la solution:Cela fonctionne en concaténant toutes les lignes (en remplaçant les nouvelles lignes par du
_
caractère), en vérifiant le motif d'une ligne et en développant les lignes à leur état d'origine.Si vous utilisez GNU
grep
, vous pouvez obtenir une correspondance multiligne dansgrep
, mais vous devez utiliser perl-regexp pourgrep
(-P
) comme mentionné dans une autre réponse . Vous pouvez toujours installer GNUgrep
sur macOS viabrew install grep
et utiliser à laggrep
place.Vous pouvez également utiliser
pcregrep
ce qui prend en charge les modèles multi-lignes (-M
).Vous pouvez également utiliser la
ex
commande, par exemple:la source