grep multiple lines
August 9th, 2007 mysurface Posted in grep, Text Manipulation | Hits: 114754 | 19 Comments »
You can grep multiple lines before or after matching the keywords. Here is a simple tips, that what I discover grep capable of. A is after, B is before.
Let say you have the message.txt shows as below:
Aug 5 02:43:12 zion kernel: [ 0.000000] Zone PFN ranges:
Aug 5 02:43:12 zion kernel: [ 0.000000] DMA 0 -> 4096
Aug 5 02:43:12 zion kernel: [ 0.000000] Normal 4096 -> 130730
Aug 5 02:43:12 zion kernel: [ 0.000000] HighMem 130730 -> 130730
Aug 5 02:43:12 zion kernel: [ 0.000000] early_node_map[1] active PFN ranges
Aug 5 02:43:12 zion kernel: [ 0.000000] 0: 0 -> 130730
Aug 5 02:43:12 zion kernel: [ 0.000000] DMI 2.3 present.
You can grep “DMA” with -B 1 and -A2
grep -B1 -A2 "DMA" message.txt
It will return
Aug 5 02:43:12 zion kernel: [ 0.000000] Zone PFN ranges:
Aug 5 02:43:12 zion kernel: [ 0.000000] DMA 0 -> 4096
Aug 5 02:43:12 zion kernel: [ 0.000000] Normal 4096 -> 130730
Aug 5 02:43:12 zion kernel: [ 0.000000] HighMem 130730 -> 130730
It is useful to grep logs with multiple lines for one entry.







September 3rd, 2007 at 10:29 am
This is damm cool. Never use this option before. Thanks for your tips.
September 11th, 2007 at 6:40 am
I use that feature all the time. I think grep & sed are my best friends. :)
March 7th, 2008 at 11:27 pm
Could you please me how to do the same in HP-UX?
Thank you in advance
October 17th, 2008 at 11:42 pm
To do the same on HP-UX, just install GNU grep on your machine.
August 11th, 2009 at 4:05 pm
Thanks pal , for the tip.
That was extremely usefull.
–Shery
November 20th, 2009 at 12:34 am
I have a slightly more complicated problem. Let’s assume I have a file like below
sdfsdghf
DMA
DMA
45346768
sdfsdgfh
DMA
DMA
DMA
5236472646
DMA
*&*(&*(&
Now I want to find out how many times DMA appear in consecutive lines. How can I do that? In above case I should get result as 2, 3 & 1
December 7th, 2009 at 7:46 pm
Try using
uniq -c | grep DMA
February 24th, 2010 at 2:25 am
That is an awesome tip. I was going to write an Perl script to extract stuff like this, but figure I should check Grep’s awesome utility first. Thanks!!
April 1st, 2010 at 10:12 am
grep -B1 -A2 “DMA” message.txt works very well, but what if I want to filter away all such matches?
Normally the -v option will do, but it doesn’t seem to work with -B or -A options… Any clue?
April 7th, 2010 at 9:41 pm
What if the my pattern is not fixed but i want get a block of data?
For example in a big file i have this whole string
##
# Host alias specification
##
Host_Alias SPARC = bigtime, eclipse, moet, anchor:\
SGI = grolsch, dandelion, black:\
ALPHA = widget, thalamus, foobar:\
HPPA = boa, nag, python
Host_Alias CUNETS = 128.138.0.0/255.255.0.0
Host_Alias CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
Host_Alias SERVERS = master, mail, www, ns
Host_Alias CDROM = orion, perseus, hercules
##
Host_Alias SPARC = bigtime, eclipse, moet, anchor:\
SGI = grolsch, dandelion, black:\
ALPHA = widget, thalamus, foobar:\
HPPA = boa, nag, python
This is a single line comin
I have smthng like this…
how can get all lines starting with host alias?
April 13th, 2010 at 4:52 am
This is the file that I am reading. When I run grep looking for “Core0″ or “Core1″ I get two results back. How can I seperate the different returns? -b 1 will give me the last item but, I cannot find a way to get just the first item of the pair.
8temp-pci-00c3
Adapter: PCI adapter
Core0 Temp: +44.0°C
Core0 Temp: +41.0°C
Core1 Temp: +37.0°C
Core1 Temp: +41.0°C
November 19th, 2010 at 3:00 pm
Excellent … Just excellent!! Thanks a lot
January 21st, 2011 at 5:39 pm
Too good… I was breaking my head to find such an option!
March 1st, 2011 at 4:12 pm
This is damm cool. Never knew such options existed in grep
how long has this been there.
July 6th, 2011 at 7:43 pm
Hi, what if I want to grep random lines eg. line 1,4,7 after a match?
July 8th, 2011 at 8:14 pm
@Babu: Oh since about 1973…
September 22nd, 2011 at 10:05 pm
Thanks a lot. It was very useful.
October 19th, 2012 at 5:45 pm
EXCELLENT !
February 1st, 2013 at 2:21 am
That’s freaking cool! Thank you so much for your help!