≡ 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:


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

{ 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


      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

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