Mastering the sed Command in Linux: A Comprehensive Guide

The sed command in Linux is a stream editor and a versatile text-processing tool. It allows users to efficiently transform text by parsing and modifying data from files or input streams. Whether you need to replace words, remove lines, or handle patterns, sed simplifies repetitive tasks and boosts productivity.

In this blog, we will explore the basics of sed command, understand its syntax, and share practical examples to show how it makes text processing easier.

Table of Contents:

  1. What is sed command in Linux?
  2. Syntax of the sed Command
  3. Common sed Operations and Practical Examples
  4. Advanced Features of sed Command
  5. Practical Use Cases
  6. Key Points to Remember

What is sed Command in Linux?

The  sed command is part of the basic set of tools available in every Linux installation. sed stands for stream editor and is a non-interactive text editor. This means that changes are not made directly to the file being edited. Instead, sed reads the file line by line, processes the content, and then outputs the result, which can be redirected to a file or another process.

With sed, you can perform operations like:

  • Select text (using patterns and regular expressions)
  • Substitute text (replace occurrences of text with other text)
  • Add lines (insert text at specific positions)
  • Delete lines (remove lines that match specific criteria)
  • Modify (or preserve) the original file (using options like -i to edit in place or redirecting output to a new file)

Syntax of the sed Command

sed [options] 'command' file
  • options: Flags that modify the behaviour of sed.
  • command: The operation sed performs on the input. This can be a substitution, deletion, insertion, etc.
  • file: The file you want to edit or process. If no file is specified, sed works on the input from standard input (stdin).

Common Options:

  • -e: To add multiple editing commands.
  • -i: To edit files in place (without creating a backup).
  • -n: To suppress default output (used with p command to print specific lines).
  • -f: To use a script file with multiple sed commands.

Common sed Operations and Practical Examples

1. Search and Replace

The most common use of sed is to find and replace text in a file or stream.

(i). Replace a word:

sed 's/oldword/newword/' file.txt

This replaces the first occurrence of oldword with newword on each line.

(ii). Replace all occurrences:

sed 's/oldword/newword/g' file.txt

The g flag ensures all occurrences of oldword are replaced.

(iii). Replace in-place:

To save changes directly in the file:

sed -i 's/oldword/newword/g' file.txt
Note: On macOS, use sed -i '' instead of sed -i.

2. Delete Lines

(i). Delete a specific line:

sed '5d' file.txt

This command deletes the 5th line of the file.

(ii). Delete a range of lines:

sed '3,7d' file.txt

This command deletes lines 3 to 7.

(iii). Delete lines containing a pattern:

sed '/pattern/d' file.txt

Removes all lines containing pattern.

3. Print Lines

(i). Print a specific line:

sed -n '5p' file.txt

Prints the 5th line.

(ii). Print a range of lines:

sed -n '3,7p' file.txt

Prints lines 3 to 7.

(iii). Print lines matching a pattern:

sed -n '/pattern/p' file.txt

Prints lines containing pattern.

4. Insert and Append Text

(i). Insert text before a specific line:

sed '3i\This is inserted text' file.txt

Inserts This is inserted text before line 3.

(ii). Append text after a specific line:

sed '3a\This is appended text' file.txt

Appends This is appended text after line 3.

5. Use sed in Pipelines

sed works seamlessly with other commands in Linux pipelines.

(i). Convert all text to uppercase:

echo "hello world" | sed 's/.*/\U&/'

(ii). Add line numbers to a file:

cat file.txt | sed = | sed 'N;s/\n/\t/'

Advanced Features of sed Command

1. Using Regular Expressions

sed supports regular expressions, making it a powerful tool for pattern matching.

Replace only lines starting with "test":

sed '/^test/s/oldword/newword/' file.txt

Replace a word at the end of a line:

sed 's/word$/newword/' file.txt

2. Using Multiple Commands

You can apply multiple commands using -e or a script file.

With -e:

sed -e 's/oldword/newword/' -e '3d' file.txt

From a script file:

Create a file commands.sed:

s/oldword/newword/
3d

Run:

sed -f commands.sed file.txt

3. Backreferences

Use backreferences to match and reuse parts of the pattern.

Swap two words:

echo "first second" | sed 's/\(first\) \(second\)/\2 \1/'

Practical Use Cases

1. Update Configuration Files

sed -i 's/timeout=30/timeout=60/' config.txt

2. Bulk Rename Files

ls *.txt | sed 's/\.txt/.bak/' | xargs -I {} mv {} {}

3. Extract Specific Data from Logs

grep "ERROR" logs.txt | sed 's/^.*ERROR: //'

Key Points to Remember

  • Use sed for non-interactive text editing.
  • Combine sed with regular expressions for complex patterns.
  • Use -i with caution as it edits files in place.
  • Adjust the -i syntax for compatibility between Linux and macOS.

Conclusion

The sed command is a versatile and essential tool for Linux users. With its ability to process text efficiently, it’s ideal for tasks ranging from simple find-and-replace to complex text transformations. Whether you are automating file updates or parsing logs, sed can simplify your workflows. Explore sed further by experimenting with its options and combining it with other Linux commands to unlock its full potential.