≡ Menu

Linux / Unix: sed Command Print Only Matching Lines

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?


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
Share this tutorial on:

Your support makes a big difference:
I have a small favor to ask. More people are reading the nixCraft. Many of you block advertising which is your right, and advertising revenues are not sufficient to cover my operating costs. So you can see why I need to ask for your help. The nixCraft, takes a lot of my time and hard work to produce. If you use nixCraft, who likes it, helps me with donations:
Become a Supporter →    Make a contribution via Paypal/Bitcoin →   

Don't Miss Any Linux and Unix Tips

Get nixCraft in your inbox. It's free:



{ 3 comments… add one }
  • chandan May 14, 2015, 9:49 am

    I am searching print a line number when specific word found.Could you please help me?

    • Peter J Nelson July 15, 2015, 6:19 pm

      chandan:

      use “grep -n ” to print line numbers with matches. Add a “-i” option to ignore case.

  • tabassum September 5, 2015, 6:27 am

    I have two files containing list of some proteins and another containing interactions of proteins including file 1 proteins with their interacting partners. I want to fetch all the interactions of file 1 proteins but among them only, discarding any new protein.
    What command or script I should use??

Leave a Comment

You can use these HTML tags and attributes: <strong> <em> <pre> <code> <a href="" title="">


   Tagged with: , , , , , , , , ,