Linux / Unix: sed Command Print Only Matching Lines

by on October 19, 2012 · 0 comments· LAST UPDATED October 19, 2012

in

I see many examples and man pages on how to do operations like search-and-replace using sed. But, I want to match a given string or a regular pattern expression and display on the screen. How do I print lines with matching pattern using sed command only under Unix like operating systems?

Tutorial details
DifficultyEasy (rss)
Root privilegesNo
Requirementssed
Estimated completion timeN/A

Sed is a stream editor for Unix like operating systems. It can perform basic text transformations on:

  • An input stream.
  • A file (regular text file).
  • Input from a pipeline (command1 | sed -e 'expr1' | command2).

Sed printing syntax and examples

Use the following syntax:

 
sed '/word/p' input
sed '/regexp/p' input
sed -n '/regex/p' /path/to/file
sed -n '/regexp/p' /path/to/file | less
sed -n -e '/regexp/p' input > output
## gnu/sed - update file with -i option ###
sed -i -n -e '/regexp/p' input
 

In this example print or show any matching lines from /etc/passwd file:

 
sed -n '/root/p' /etc/passwd
 

Sample outputs:

root:x:0:0:root:/root:/usr/local/sbin/nologin_corp

The -n option asks sed to not display the regex or patten unless explicitly asked to do so. Try removing -n option and you will understand the difference:

 
sed '/root/p' /etc/passwd
 

You can print lines using line addresses. In this example print second line:

 
sed '2p' /etc/passwd
 

The 'p' command is preceded by a '2'. The number '2' refers to line number two. You can tell sed to perform prints only on a particular line or lines. In this example print 1 to 5 lines:

 
sed '1,5p' /etc/passwd
 

The 'p' command is preceded by line rage address 1,5 (separated by a comma). You can also print using two regexps and the syntax is:

 
sed -n -e '/WORD-1/,/WORD-2/p' input.file
sed -n -e '/regexpA/,/regexpB/p' input.file
 

In this example, print a block of data that starts with a line containing "BROWN", and ending with a line that contains "GREEN":

 
sed -n -e '/BROWN/,/GREEN/p' colours.txt
 

The following example will print section of file from a line contcontaining "GREEN" to end of file:

 
sed -n '/GREEN/,$p' colours.txt
 
Recommened readings
TwitterFacebookGoogle+PDF versionFound an error/typo on this page? Help us!

{ 0 comments… add one now }

Leave a Comment

Tagged as: , , , , , , , , ,

Previous Faq:

Next Faq: