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
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
- Sed one liners
- man page sed