Sed Command in Linux: A Comprehensive Guide

Sed Command in Linux: A Comprehensive Guide

The sed command in Linux is a powerful and versatile tool used for text manipulation. Standing for “stream editor,” sed allows users to search, find, and replace, insert, and delete text within files and streams. It operates by processing input line by line, making it ideal for editing large amounts of text or automating tasks. This guide will cover the essentials of sed, including its basic syntax, common options, and examples of how to use it effectively.

Understanding the Basics of Sed

The basic syntax of the sed command is straightforward. It typically follows this structure:

sed [options] 'command' filename 
  • Options: Modify the behavior of sed.
  • Command: Specifies the action sed should perform.
  • Filename: The name of the file you want to edit.

You can also use sed to manipulate text streams without specifying a file. In this case, sed reads from standard input and outputs the results to standard output.

Commonly Used Options

Here are some commonly used options in sed:

  • -n: Suppresses automatic printing. Only lines explicitly instructed to print will be displayed.
  • -e: Allows multiple commands to be executed in sequence.
  • -i: Edits the file in place, saving changes directly to the file.
  • -r: Enables extended regular expressions, making complex patterns easier to write.

How Sed Works

Sed processes each line of the input sequentially. It reads a line, applies the specified command, and then moves on to the next line. Unless instructed otherwise, sed outputs the modified text to standard output.

Basic Operations with Sed

1. Substituting Text

One of the most common uses of sed is text substitution. The substitution command uses the syntax:

sed 's/old_text/new_text/' filename 

This command searches for “old_text” and replaces it with “new_text” on each line of the file. Here’s an example:

sed 's/cat/dog/' animals.txt 

In this example, sed replaces the word “cat” with “dog” in the animals.txt file. By default, sed replaces only the first occurrence of the pattern in each line. To replace all occurrences, add the g (global) flag:

sed 's/cat/dog/g' animals.txt 

This command replaces all instances of “cat” with “dog” in each line.

2. Deleting Lines

Sed can also delete specific lines in a file. The syntax for deleting lines is:

sed 'nd' filename 

Here, n represents the line number you want to delete. For example:

sed '3d' animals.txt 

This command deletes the third line in the animals.txt file. To delete a range of lines, specify the start and end line numbers:

sed '2,5d' animals.txt 

This deletes lines 2 through 5 from the file.

3. Inserting and Appending Text

You can use sed to insert or append text to specific lines. To insert text before a line, use the i command:

sed '3inew line of text' filename 

This command inserts “new line of text” before line 3. To append text after a line, use the a command:

sed '3anew line of text' filename 

This appends “new line of text” after line 3.

Using Regular Expressions with Sed

Regular expressions (regex) are patterns that help match specific sequences of characters within text. Sed supports regular expressions, allowing for more complex and powerful text manipulations.

1. Matching Patterns

You can use regex to match patterns in sed. For instance:

sed -n '/pattern/p' filename 

This command prints lines that contain the specified pattern. For example:

sed -n '/^a/p' animals.txt 

This prints lines in animals.txt that start with the letter “a”. The caret symbol ^ represents the beginning of a line.

2. Substituting with Regex

Regular expressions can also be used in substitution. For example, to replace any digits in a file with an asterisk, use:

sed 's/[0-9]/*/g' filename 

This command replaces all digits with an asterisk in each line.

Advanced Sed Techniques

1. Multiple Commands

You can use sed to perform multiple commands in a single operation. One way to do this is by using the -e option:

sed -e 's/cat/dog/' -e 's/mouse/rat/' animals.txt 

This command replaces “cat” with “dog” and “mouse” with “rat” in one go.

Another approach is to use curly braces {} to group commands:

sed '2{ s/cat/dog/; s/mouse/rat/ }' animals.txt 

This applies both substitutions only to the second line.

2. Editing Files In-Place

The -i option allows you to edit files directly. Be cautious with this option, as it saves changes to the file immediately:

sed -i 's/old/new/g' filename 

This command replaces all occurrences of “old” with “new” in the file and saves the changes.

Practical Examples of Using Sed

Example 1: Removing Blank Lines

To remove all blank lines from a file, use:

sed '/^$/d' filename 

The ^$ regex pattern matches blank lines, and d deletes them.

Example 2: Replacing Tabs with Spaces

To replace all tabs with four spaces:

sed 's/t/ /g' filename 

This replaces each tab character with four spaces.

Example 3: Print Lines Matching a Pattern

To print only lines that contain the word “error”:

sed -n '/error/p' logfile.txt 

This is useful for extracting specific information from log files.

Conclusion

The sed command is a powerful tool for text manipulation in Linux. Its flexibility allows for simple substitutions to complex text processing tasks. Whether you are editing a single file or automating text processing across multiple files, mastering sed can significantly enhance your efficiency.

By understanding the basic syntax, common options, and advanced techniques, you can unlock the full potential of sed. Regular practice with real-world examples will help you become proficient in using this versatile command-line utility.

Fedya Serafiev

Fedya Serafiev

Fedya Serafiev owns the website linuxcodelab.eu. He finds satisfaction in helping people solve even the most complex technical problems. His current goal is to write easy-to-follow articles so that such problems do not arise at all.

Thank you for reading the article! If you found the information useful, you can donate using the buttons below: