2

Consider the simplified file

AAA
BBB
CCC1
DDD
EEE
CCC2
DDD
FFF
GGG
CCC3
HHH

I can pick out the range EEE to FFF with

sed -n '/EEE/,/FFF/p'

Suppose though that I want to print any line containing C but only within the matching range. I can pipe the result from sed through grep

sed -n '/EEE/,/FFF/p' | grep 'C'

I could also do the range and match in a little awk script (or perl, python, etc.). But how would I do this using just one invocation of sed?

11

Use a block in which you tell sed to only print when it sees C:

sed -n '/EEE/,/FFF/{/C/p}'
4

You can try :

sed '/EEE/,/FFF/!d;/C/!d'
  • I like this solution too. I haven't got my head around the idea of deleting lines I don't want (although that's perfectly reasonable in a stream editor), and actually not having the -n flag requiring /p has advantages. Thanks – roaima Sep 29 '18 at 17:37

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.