145

How do I grep a file for 19:55 and get the Line 1,2,3,4,5?

2013/10/08 19:55:27.471
Line 1
Line 2
Line 3
Line 4
Line 5

2013/10/08 19:55:29.566
Line 1
Line 2
Line 3
Line 4
Line 5
Chris Seymour
  • 83,387
  • 30
  • 160
  • 202
Leandro Toshio Takeda
  • 1,599
  • 3
  • 16
  • 15
  • 2
    Your title looks brilliant. You know - no, I don't grep a file and get it's 5 lines :p – Alma Do Oct 09 '13 at 13:57
  • Possible duplicate of [grep a file, but show several surrounding lines?](https://stackoverflow.com/questions/9081/grep-a-file-but-show-several-surrounding-lines) – Organic Advocate Aug 07 '19 at 18:44

3 Answers3

264

You want:

grep -A 5 '19:55' file

From man grep:

Context Line Control

-A NUM, --after-context=NUM

Print NUM lines of trailing context after matching lines.  
Places a line containing a gup separator (described under --group-separator) 
between contiguous groups of matches.  With the -o or --only-matching
option, this has no effect and a warning is given.

-B NUM, --before-context=NUM

Print NUM lines of leading context before matching lines.  
Places a line containing a group separator (described under --group-separator) 
between contiguous groups of matches.  With the -o or --only-matching
option, this has no effect and a warning is given.

-C NUM, -NUM, --context=NUM

Print NUM lines of output context.  Places a line containing a group separator
(described under --group-separator) between contiguous groups of matches.  
With the -o or --only-matching option,  this  has  no effect and a warning
is given.

--group-separator=SEP

Use SEP as a group separator. By default SEP is double hyphen (--).

--no-group-separator

Use empty string as a group separator.
Chris Seymour
  • 83,387
  • 30
  • 160
  • 202
  • It would be great if there was a way to not limit the output to a certain amount of lines but print *all* lines after the matched one. – Matthias Braun May 19 '19 at 17:18
4

Some awk version.

awk '/19:55/{c=5} c-->0'
awk '/19:55/{c=5} c && c--'

When pattern found, set c=5
If c is true, print and decrease number of c

Jotne
  • 40,548
  • 12
  • 51
  • 55
2

Here is a sed solution:

sed '/19:55/{
N
N
N
N
N
s/\n/ /g
}' file.txt
Jason
  • 75
  • 4