How to use SED command in Linux?

By | March 18, 2022
SED command in Linux

SED, the short form of Stream Editor, is one of the most powerful text manipulation command-line tools that Linux offers. Predominantly used for text substitution, it can also perform other operations on files and text streams, such as finding patterns, replacing them without even opening files, inserting text, etc.

The command can also understand regex as a form of patterns rather than simple strings, which provide more flexible ways to filter or manipulate the text in files. The SED command follows a pretty simple syntax. Also, SED is pre-installed in almost all Linux distributions.

$ sed -i 's/pattern-or-regex/new-string/g' file

Let’s try to understand the syntax of the SED command. The default behavior of the SED command is to display output to the standard output stream in Linux. However, if we want to perform in-place edits on files, we need to use the -i option. Also, if we use an extension called .bak and the -i option, a backup of the old file will be created before performing the edits. The s command is used to specify that the operation to be performed is a substitution.

Slash is used as a delimiter, and we specify the pattern as a simple string or a regex pattern. After that, we specify the replacement string. We have used another flag at the end called the global replacement (-g). The SED command with the g option helps to replace all the occurrences of the regex/string and not only the initial occurrence. However, the general syntax of this command is:

$ sed [options]... [script] [input-file]

Using SED to replace

We can use the s option and the SED command to replace the first occurrence of the string in a line, and this command can be performed for all the lines. Lines are separated by line breaks.

$ sed ‘s/technical/Technical’ ~/sample/file1.txt

$ sed ‘s/technical/Technical’ ~/sample/file1.txt

We can observe that we have made the required replacements as per the above command.

Vamware

Replacing all occurrences

By default, the SED command will be substituting only the first occurrence of each line’s mentioned pattern. If there are multiple pattern matches in a single line, and we want to replace them, we can use the g (global replacement) flag.

$ sed 's/technical/Technical/g' ~/sample/file1.txt

$ sed 's/technical/Technical/g' ~/sample/file1.txt

Vamware

Substituting nth occurrence

We can specify which position or occurrence of pattern in a line we want to replace by simply appending the value of n at the end of the replacement string.

$ sed' s/technical/Technical/2' ~/sample/file1.txt

In this example, we want to replace the second occurrence only.

$ sed' s:technical:Technical:2' ~:sample:file1.txt

We can see that only the second appearance of the string/pattern has been substituted.

Replace on a specific line

We can also specify the line number on which we want to perform the replacement. Just add the line number in front of the replacement string as mentioned below.

Vamware
$ sed '3 s/technical/Technical/' ~/sample/file1.txt

Here, we want to replace the word “technical” with “Technical” for the third line’s first occurrence.

$ sed '3 s/technical/Technical/' ~/sample/file1.txt

You can see that the desired operation has been performed.

Displaying partial content

Instead of printing or displaying the entire content of a file, we can print specific lines only. We need to use the -n option to prevent the command from printing the entire file and the p option to display particular lines. For example, if we want to print only the 2nd and 3rd line, we can use this command:

$ sed -n 2,3p ~/sample/file1.txt

$ sed -n 2,3p ~/sample/file1.txt

If we want to display all the lines except a few, we can mention the line numbers that we want not to print using the d option. For example, if we don’t want to print the second line only, we can use the following method.

$ sed 2d ~/sample/file1.txt

$ sed 2d ~/sample/file1.txt

We can see that the second line has not been displayed.

Suppose we want to leave all those lines in which the command has found a match for the pattern and print all the rest lines; we can just append the d flag at the end of the replacement string.

$ sed ‘/technical/d’ ~/sample/file1.txt

$ sed ‘/technical/d’ ~/sample/file1.txt

If we want to print only those lines where the command has performed the replacement, we can append the s flag at the beginning for substitution, mention the pattern and replacement string so that it performs the replacement, and at the end, we can append the p flag which will print only the affected lines. We will also need to use the -n option to avoid printing the entire content.

$ sed -n 's/technical/Technical/p' ~/sample/file1.txt

$ sed -n 's/technical/Technical/p' ~/sample/file1.txt

You can see that the command has printed only the affected lines.

Combining multiple SEDs

If we want to perform more than one substitution using the SED command, we can perform it using the e option to chain all the commands. Suppose, if we want to replace “technical” with “Technical” and “is” with “are” at the same time, we can use this method.

$ sed -e ‘s/technical/Technical/g’ -e ‘s/is/are/g’ ~/sample/file1.txt

$ sed -e ‘s/technical/Technical/g’ -e ‘s/is/are/g’ ~/sample/file1.txt

Wrapping Up!

To sum up, in this comprehensive and detailed article, we started with discussing the use of the SED command and what operations it can perform on text files and streams of text. Moving ahead, we discussed the general syntax of the SED command used to substitute patterns with strings of words.

We then saw many options and flags that can be used with the SED command to modify the result. For example, we discussed the s option for substitution, g option for global replacement, n option for displaying partial text, displayed specific line and replace nth occurrences only. We performed partial replacements, and at the end of the tutorial, we discussed how we could use the -e option to combine multiple SED commands to make the process a whole lot easier.

We certainly hope that if you follow this guide on SED command, you will get hands-on experience with the real use-cases of it and adapt it for simple manipulations of text files.

Happy Learning!

People are also reading:

Author: Maaz Bin Asad

Maaz is a freelance content writer and an engineering undergraduate who is experienced working in the software development industry. He likes solving algorithmic problems and finding new approaches to optimize given problems.

Leave a Reply

Your email address will not be published.