$show=/label

Grep - Print N Lines Before and After Match: Unix Command

SHARE:

A quick guide to Grep - Print N Lines Before and After Match: Unix Command. Example commands to show n lines after and before a match.

1. Grep Overview

In this tutorial, We'll learn how to print before and after grep command results content for each match in UNIX.

In my work some days back, I was using a UNIX grep command on the log file. My job is to find the exceptions in the log file and get the complete exception stack trace. But when we do the following command returns only the line that matches the Exception word.

grep 'Exception' apllication.log


After doing research on grep command, found useful flags that are very helpful. Before that just see the useful use case.

Print Before and After Lines Using Grep



2. Sample application.log file


The below provides is a just a example application log file. This application processes the trade transactions for every business day and processing is done batch by batch. Each batch takes 100 messages for processing. Take a look at this log file for our demo.

Application Started.
Processing 100 trade messages for business date : 2019-12-12
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 12 out of bounds for length 0
 at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
 at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
 at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
 at java.base/java.util.Objects.checkIndex(Objects.java:372)
 at java.base/java.util.ArrayList.get(ArrayList.java:458)
 at com.java.w3schools.blog.core.exceptin.ApplicationProcess.main(ApplicationProcess.java:11)

Processing batch 2 - 100 trade messages for business date : 2019-12-12
Exception in thread "main" java.lang.ArithmeticException: / by zero
 at com.java.w3schools.blog.core.exceptin.ApplicationProcess.main(ApplicationProcess.java:11)
Processing batch 3 - 100 trade messages for business date : 2019-12-12
Processing batch 3 - Completed
Processing batch 4 - 100 trade messages for business date : 2019-12-12
Exception in thread "main" com.java.w3schools.blog.core.exceptin.ServiceDownException: Manager Service is down. Please restart the Service.
 at com.java.w3schools.blog.core.exceptin.ApplicationProcess.main(ApplicationProcess.java:11)
There are several batches failure. These will be reprocessed in next run.


Output:

Ran the grep command on the this file and produced the following output.

$ grep 'Exception' application.log
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 12 out of bounds for length 0
Exception in thread "main" java.lang.ArithmeticException: / by zero
Exception in thread "main" com.java.w3schools.blog.core.exceptin.ServiceDownException: Manager Service is down. Please restart the Service

But, this is not much helpful just giving the error reason. We should find the the exact location of the file problem occurs. This information sits in next few lines after the exception.

My friends also asked me many times How did I fetch lines before/after the grep result in bash? I will show you the solution in a few minutes. It is very simple.

Some more colleagues asked, How did you manage this manually getting after the exception lines or is there way to show lines before and after the match in Linux?

I told them, always do some research before doing manually anything.

Found the useful and hand flags with Grep.

3. Grep Command Parameters:


Parameter for grep to show lines before and after the found line.


-A number of lines to show after every match
-B number of lines to show before every match
-C numbers of lines to show before and after every match(with default of 2).

4. Example Grep Commands


Printing 6 lines after match with 'java.lang.IndexOutOfBoundsException'

$ grep -A 6 'java.lang.IndexOutOfBoundsException' application.log
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 12 out of bounds for length 0
        at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
        at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
        at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
        at java.base/java.util.Objects.checkIndex(Objects.java:372)
        at java.base/java.util.ArrayList.get(ArrayList.java:458)
        at com.java.w3schools.blog.core.exceptin.ApplicationProcess.main(ApplicationProcess.java:11)

printing 1 extra line after every match with word 'Exception'

$ grep -A 1 'Exception' application.log
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 12 out of bounds for length 0
        at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
--
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at com.java.w3schools.blog.core.exceptin.ApplicationProcess.main(ApplicationProcess.java:11)
--
Exception in thread "main" com.java.w3schools.blog.core.exceptin.ServiceDownException: Manager Service is down. Please restart the Service.
        at com.java.w3schools.blog.core.exceptin.ApplicationProcess.main(ApplicationProcess.java:11)

All matches are separated by a double hyphen "--".

We can use -B to see the lines before each match.

grep -B 3 'Exception' application.log


This command prints 3 lines before match.

Use -C to show surrounding lines for each match (Before and After match)

grep -C 1 'Exception' application.log


Prints 1 lines before and after every match.

5. Conclusion


In this article, We've learned how to print the surrounding lines when grep a file. Options are -A for After, -B for Before and -C for before & after each match.

Typically grep is an efficient way to search text. However, it can be quite slow in some cases, and it can search for large files where even minor performance tweaking can help significantly.

Grep Reference
Grep After Match
Ma Ref
Stackoverflow

COMMENTS

BLOGGER

About Us

Author: Venkatesh - I love to learn and share the technical stuff.
Name

accumulo,1,ActiveMQ,2,Adsense,1,API,37,ArrayList,16,Arrays,7,Bean Creation,3,Bean Scopes,1,BiConsumer,1,Blogger Tips,1,Books,1,C Programming,1,Collection,5,Collections,22,Collector,1,Command Line,1,Compile Errors,1,Configurations,7,Constants,1,Control Statements,8,Conversions,6,Core Java,81,Corona India,1,Create,2,CSS,1,Date,3,Date Time API,4,Dictionary,1,Difference,1,Download,1,Eclipse,2,Efficiently,1,Error,1,Errors,1,Exception,1,Exceptions,3,Fast,1,Files,9,Float,1,Font,1,Form,1,Freshers,1,Function,3,Functional Interface,2,Garbage Collector,1,Generics,4,Git,4,Grant,1,Grep,1,HashMap,1,HomeBrew,2,HTML,2,HttpClient,2,Immutable,1,Installation,1,Interview Questions,5,Iterate,2,Jackson API,3,Java,29,Java 10,1,Java 11,5,Java 12,5,Java 13,2,Java 14,2,Java 8,66,Java 8 Difference,2,Java 8 Stream Conversions,2,java 8 Stream Examples,3,Java 9,1,Java Conversions,11,Java Design Patterns,1,Java Files,1,Java Program,2,Java Programs,65,java.lang,5,java.util. function,1,jQuery,1,Kotlin,10,Kotlin Conversions,3,Kotlin Programs,6,Lambda,1,lang,29,Leap Year,1,live updates,1,Logging,1,Mac OS,2,Math,1,Maven,1,Method References,1,Mockito,1,MongoDB,3,New Features,1,Operations,1,Optional,6,Oracle,5,Oracle 18C,1,Partition,1,Patterns,1,Programs,1,Property,1,Python,2,Quarkus,1,Read,1,Real Time,1,Recursion,2,Remove,2,Rest API,1,Schedules,1,Serialization,1,Servlet,1,Sort,1,Sorting Techniques,8,Spring,2,Spring Boot,23,Spring Email,1,Spring MVC,1,Streams,21,String,58,String Programs,9,String Revese,1,Swing,1,System,1,Tags,1,Threads,10,Tomcat,1,Tomcat 8,1,Troubleshoot,16,Unix,2,Updates,3,util,5,While Loop,1,
ltr
item
JavaProgramTo.com: Grep - Print N Lines Before and After Match: Unix Command
Grep - Print N Lines Before and After Match: Unix Command
A quick guide to Grep - Print N Lines Before and After Match: Unix Command. Example commands to show n lines after and before a match.
https://1.bp.blogspot.com/-QpD6UmEVWpI/XP92FWb7Z1I/AAAAAAAABps/DpGi5GWkMG84ZBoMc_HpyTyXzqSdt1xXACLcBGAs/s640/Print%2BBefore%2Band%2BAfter%2BLines%2BUsing%2BGrep.PNG
https://1.bp.blogspot.com/-QpD6UmEVWpI/XP92FWb7Z1I/AAAAAAAABps/DpGi5GWkMG84ZBoMc_HpyTyXzqSdt1xXACLcBGAs/s72-c/Print%2BBefore%2Band%2BAfter%2BLines%2BUsing%2BGrep.PNG
JavaProgramTo.com
https://www.javaprogramto.com/2019/06/grep-print-more-lines.html
https://www.javaprogramto.com/
https://www.javaprogramto.com/
https://www.javaprogramto.com/2019/06/grep-print-more-lines.html
true
3124782013468838591
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content