Advanced Bash Scripting

sed

sed print

sed is a powerful stream editor for transforming text on the command line. In this guide, you'll learn how to use the p (print) script to display lines selectively, control automatic output, and integrate sed into complex pipelines. Whether you're filtering log files or extracting specific records, mastering sed's I/O model is essential for efficient command-line workflows.

Unix I/O Model

I/O TypeDescriptionExample
Default OutputCommands write to the terminal by defaultls
Default InputCommands read from files or stdin when unspecifiedgrep "pattern" file.txt
Pipes (``)Passes one command's output as another's input
Interactive InputReads from keyboard until EOF or terminationsed 'p'

sed's Default Behavior

By default, sed processes text from stdin or listed files and writes each line to stdout, applying any provided scripts.

Typing:

sed 'p'

reads from stdin and applies the p (print) script to every line.

Example:

echo "Hello from sed" | sed 'p'

Output:

Hello from sed
Hello from sed

Explanation:

  1. sed reads each line into the pattern space.
  2. The p script prints it immediately.
  3. Without disabling automatic printing, sed outputs the line again after processing.

Syntax Overview

sed [OPTION]... {script-only-if-no-other-script} [input-file]...

The image shows a command-line syntax for the `sed` command, specifically highlighting the use of the print (`p`) script.

Using sed with Pipes and Files

Piping Input

echo "This line prints twice" | sed 'p'

Output:

This line prints twice
This line prints twice

Reading from a File

echo "File line example" > sample.txt
sed 'p' sample.txt

Output:

File line example
File line example

In this case, sample.txt replaces stdin as sed's input source.

Selecting Specific Lines

sed supports addresses (such as line numbers) to target scripts.

# Create a sample file
echo "first line"  > file_sample.txt
echo "second line" >> file_sample.txt
echo "third line"  >> file_sample.txt

# Print only the second line twice
sed '2p' file_sample.txt

Output:

first line
second line
second line
third line

Explanation:

  • Line 2 matches 2p, so it's printed by the script and then automatically once more.

Note

Use single quotes (') around sed scripts to prevent the shell from interpreting special characters.

Suppressing Automatic Printing

To output only the lines you explicitly match, use the -n option.

sed -n '2p' file_sample.txt

Output:

second line

Warning

Forgetting -n can lead to duplicate lines when using print scripts.

Real-World Example: Filtering Command Output

Extract the third line from the df -h display:

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       7.7G  2.9G  4.9G  38% /
devtmpfs        486M     0  486M   0% /dev
tmpfs           490M     0  490M   0% /dev/shm
...

Apply sed:

df -h | sed -n '3p'

Result:

tmpfs           490M     0  490M   0% /dev/shm

Working with a Data File

Consider an employees.txt file with pipe-delimited records:

The image shows a text file named "employees.txt" containing a list of employees with details such as name, department, job title, email, and salary.

Field No.Field NameDescription
1Record NumberUnique employee ID
2First NameEmployee's first name
3Last NameEmployee's last name
4DepartmentDepartment name
5Job TitlePosition held
6EmailCompany email address
7SalaryAnnual salary in USD

To print the fifth record only:

sed -n '5p' employees.txt

Output:

5|Feng|Lin|Sales|Sales Manager|[email protected]|90000

Summary

  • sed reads from stdin or listed files by default.
  • Enclose scripts in single quotes to avoid shell expansion.
  • Use addresses (e.g., 2p) to target specific lines.
  • The -n option disables automatic printing for precise control.
  • Place input files after the script.

In upcoming lessons, we'll cover additional sed commands:

  • d delete lines
  • s substitute text
  • i insert text

References

  • GNU sed Manual: https://www.gnu.org/software/sed/manual/
  • Bash Reference Manual: https://www.gnu.org/software/bash/manual/

Watch Video

Watch video content

Previous
Introduction
Next
Delete