sed Command in Linux

Introduction to sed Command in Linux

This lab provides a comprehensive guide to using the sed (stream editor) command in Linux for efficient text processing and editing. You'll master the fundamentals of sed, including text substitution, batch editing of multiple files, and more. This tutorial will equip you with the skills to manipulate and transform text data directly from the command line, a crucial skill for any systemadmin.

We begin with the basic sed command syntax, covering how to display file content, select specific lines, perform find and replace operations, remove lines, and insert or append text. Then, we delve into advanced text substitution techniques, enabling you to apply changes across numerous files. Finally, you'll discover how to edit multiple files simultaneously with sed, significantly improving your text processing workflows as a systemadmin.

Understand the Basics of sed Command

This section introduces the core concepts of the sed (stream editor) command in Linux. sed is an essential tool for system administrators for text manipulation and editing, providing a range of functionalities for working with text files.

Let's begin by creating a sample text file for practice:

echo "This is a sample text file." > sample.txt

Now, let's examine some fundamental sed commands:

Display the Entire File Content

To show the complete content of a file, use the following command:

sed 's/.*/&/' sample.txt

Example output:

This is a sample text file.

Show a Specific Line

To extract and print a specific line, specify the line number along with the p option. Note you should add the `-n` option to supress the default output.

sed -n '1p' sample.txt

Example output:

This is a sample text file.

Replace Text

To replace text, use the s command followed by the pattern to find and the replacement string:

sed 's/sample/new/' sample.txt

Example output:

This is a new text file.

Delete Lines

To remove a specific line, use the d command followed by the line number:

sed '1d' sample.txt

Example output:

Insert or Append Text

To insert text before a line, use the i command. To append text after a line, use the a command:

sed '1i This is an inserted line.' sample.txt
sed '1a This is an appended line.' sample.txt

Example output:

This is an inserted line.
This is a sample text file.
This is an appended line.

These are just a few basic examples of using the sed command. In the next step, we will explore more advanced sed operations, such as performing text substitution in multiple files.

Perform Text Substitution Using sed

In this step, we will explore more advanced text substitution using the sed command.

First, let's create a new sample file with multiple occurrences of the word "old":

echo "This is an old text. Replace the old text with new text." > sample.txt

Replace all occurrences of a word

To replace all occurrences of a word, use the global g flag:

sed 's/old/new/g' sample.txt

Example output:

This is an new text. Replace the new text with new text.

Replace only the first occurrence

To replace only the first occurrence, omit the global g flag:

sed 's/old/new/' sample.txt

Example output:

This is an new text. Replace the old text with new text.

Replace on a specific line

To replace text on a specific line, use the line number before the s command:

sed '1s/old/new/' sample.txt

Example output:

This is an new text. Replace the old text with new text.

Replace using regular expressions

Sed also supports regular expressions. To replace text using a regular expression, use the \1 syntax to refer to captured groups:

sed 's/\(This.*\)old\(.*\)/\1new\2/' sample.txt

Example output:

This is an new text. Replace the new text with new text.

Replace in multiple files

To replace text in multiple files, pass the file names as arguments to the sed command:

sed 's/old/new/g' sample.txt another_file.txt

This will perform the text substitution in both sample.txt and another_file.txt.

In the next step, we will learn how to edit multiple files using the sed command.

Edit Multiple Files with sed

This section demonstrates how to leverage the sed command to edit multiple files simultaneously, a common task for systemadmin tasks like configuration management.

First, let's create two sample text files:

echo "This is the first file." > file1.txt
echo "This is the second file." > file2.txt

Replace Text in Multiple Files

To replace text in multiple files, simply include the file names as arguments to the sed command:

sed 's/first/updated/g' file1.txt file2.txt

Example output:

This is the updated file.
This is the second file.

Edit Files In-Place

By default, sed prints the modified output to the terminal. To directly modify the files, use the -i option:

sed -i 's/second/new/g' file1.txt file2.txt

Now, file1.txt and file2.txt will be updated with the changes.

Create Backup Files

To preserve the original files, use the -i option along with a backup extension:

sed -i.bak 's/new/updated/g' file1.txt file2.txt

This creates file1.txt.bak and file2.txt.bak, containing the original file contents.

Recursive File Editing

To recursively edit files within a directory, combine the find command with sed:

find . -type f -name "*.txt" -exec sed -i 's/updated/final/g' {} \;

This command replaces all instances of "updated" with "final" in all .txt files within the current directory and its subdirectories. This is especially useful for systemadmin tasks where you may have to update many configuration files recursively.

These techniques enable efficient editing of multiple files using the sed command. This is invaluable when performing widespread text replacements or modifications across multiple files, a common task when you manage Linux servers as a systemadmin.

Summary

This lab covered the fundamentals of the sed command in Linux, including file display, line selection, text replacement, line deletion, and text insertion/appending. We also explored advanced text substitution techniques and editing multiple files simultaneously using sed.

The key takeaways are the versatility and power of the sed command for text processing and editing tasks in Linux. Mastering sed is crucial for any systemadmin working with Linux.

400+ Linux Commands