Sed Command in Linux/Unix With Examples
The SED (Stream Editor) command is one of the most powerful tools used during text processing in Linux/Unix systems. The SED command is generally used to perform tasks such as search and replace, text manipulation, and stream editing.
Using SED, you can easily handle text files without opening them in an editor, and that’s what makes it a perfect choice to edit batch files, manage log files, and perform quick transformations on large files.
In this guide, we will walk you through the SED command syntax, use cases and most commonly used SED options to help you master this power tool. You’ll also learn how to securely manipulate text, replace strings, delete lines, and automate tasks seamlessly in Linux/Unix environments.
What is the Sed Command
The SED command (Stream Editor) is a text manipulation tool used to perform basic text transformations and advanced operations such as find and replace, text insertion, deletion, and substitution. It is commonly used in bscripts to automate tasks (such as file editing).
Sed Command Syntax:
The basic syntax for using the SED command in Linux is:
sed [options] 'command' [inputfile...]
where,
- ‘OPTIONS’: These are optional flags that modify the behavior of the sed command.
- ‘COMMAND’: This defines the command or sequence of commands to execute on the input file.
- ‘INPUTFILE’: One or more input files to be processed.
Commonly Used SED Command Options
Below are some of the most frequently used SED command options, let’s check them out:
Option | Description |
---|---|
-i |
Edit the file in place without printing to the console (overwrite the file). |
-n |
Suppress automatic printing of lines. |
-e |
Allows multiple commands to be executed. |
-f |
Reads sed commands from a file instead of the command line. |
-r |
Enables extended regular expressions. |
Practical Examples of SED Command Usage
Here are some basic SED commands that will help you get started with text manipulation.
Consider the below text file as an input.
$cat > geekfile.txt
unix is great os. unix is opensource. unix is free os.
learn operating system.
unix linux which one you choose.
unix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.
1. Sample Commands
Replacing or substituting string: Sed command is mostly used to replace the text in a file. The below simple sed command replaces the word “unix” with “linux” in the file.
$sed 's/unix/linux/' geekfile.txt
Output:
linux is great os. unix is opensource. unix is free os.
learn operating system.
linux linux which one you choose.
linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.
Here the “s” specifies the substitution operation. The “/” are delimiters. The “unix” is the search pattern and the “linux” is the replacement string. By default, the sed command replaces the first occurrence of the pattern in each line and it won’t replace the second, third…occurrence in the line.
2. Replacing the nth Occurrence of a Pattern in a Line
To replace only the nth occurance of a word in a line, use the following syntax:
sed 's/old_word/new_word/n' filename
Use the ‘/1’, ‘/2’ etc. flags to replace the first, second occurrence of a pattern in a line. The below command replaces the second occurrence of the word “unix” with “linux” in a line.
$sed 's/unix/linux/2' geekfile.txt
Output:
unix is great os. linux is opensource. unix is free os.
learn operating system.
unix linux which one you choose.
unix is easy to learn.linux is a multiuser os.Learn unix .unix is a powerful.
3. Replacing all the Occurrence of the Pattern in a Line
Here, we will use the g flag to replace all the occurances of a pattern in a line. Let’s check out the syntax below:
sed 's/old_word/new_word/g' filename
The substitute flag /g (global replacement) specifies the sed command to replace all the occurrences of the string in the line.
$sed 's/unix/linux/g' geekfile.txt
Output:
linux is great os. linux is opensource. linux is free os.
learn operating system.
linux linux which one you choose.
linux is easy to learn.linux is a multiuser os.Learn linux .linux is a powerful.
4. Replacing from nth Occurrence to all Occurrences in a Line
Use the combination of /1, /2 etc and /g to replace all the patterns from the nth occurrence of a pattern in a line. The following sed command replaces the third, fourth, fifth… “unix” word with “linux” word in a line.
$sed 's/unix/linux/3g' geekfile.txt
Output:
unix is great os. unix is opensource. linux is free os.
learn operating system.
unix linux which one you choose.
unix is easy to learn.unix is a multiuser os.Learn linux .linux is a powerful.
5. Parenthesize First Character of Each Word
This sed example prints the first character of every word in parenthesis.
$ echo "Welcome To The Geek Stuff" | sed 's/\(\b[A-Z]\)/\(\1\)/g'
Output:
(W)elcome (T)o (T)he (G)eek (S)tuff
6. Replacing String on a Specific Line Number
You can restrict the sed command to replace the string on a specific line number. An example is
$sed '3 s/unix/linux/' geekfile.txt
Output:
unix is great os. unix is opensource. unix is free os.
learn operating system.
linux linux which one you choose.
unix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.
The above sed command replaces the string only on the third line.
7. Duplicating the Replaced Line with /p flag
The /p print flag prints the replaced line twice on the terminal. If a line does not have the search pattern and is not replaced, then the /p prints that line only once.
$sed 's/unix/linux/p' geekfile.txt
Output:
linux is great os. unix is opensource. unix is free os.
linux is great os. unix is opensource. unix is free os.
learn operating system.
linux linux which one you choose.
linux linux which one you choose.
linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.
linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.
8. Printing Only the Replaced Lines
Use the -n option along with the /p print flag to display only the replaced lines. Here the -n option suppresses the duplicate rows generated by the /p flag and prints the replaced lines only one time.
$sed -n 's/unix/linux/p' geekfile.txt
Output:
linux is great os. unix is opensource. unix is free os.
linux linux which one you choose.
linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.
If you use -n alone without /p, then the sed does not print anything.
9. Replacing String on a Range of Lines
You can specify a range of line numbers to the sed command for replacing a string.
$sed '1,3 s/unix/linux/' geekfile.txt
Output:
linux is great os. unix is opensource. unix is free os.
learn operating system.
linux linux which one you choose.
unix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.
Here the sed command replaces the lines with range from 1 to 3. Another example is
$sed '2,$ s/unix/linux/' geekfile.txt
Output:
unix is great os. unix is opensource. unix is free os.
learn operating system.
linux linux which one you choose.
linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful
Here $ indicates the last line in the file. So the sed command replaces the text from second line to last line in the file.
10. Deleting Lines from a Particular File
SED command can also be used for deleting lines from a particular file. SED command is used for performing deletion operation without even opening the file
Examples:
1. To Delete a particular line say n in this example
Syntax: $ sed 'nd' filename.txt Example: $ sed '5d' filename.txt
2. To Delete a last line
Syntax:
$ sed '$d' filename.txt
3. To Delete line from range x to y
Syntax: $ sed 'x,yd' filename.txt Example: $ sed '3,6d' filename.txt
4. To Delete from nth to last line
Syntax: $ sed 'nth,$d' filename.txt Example: $ sed '12,$d' filename.txt
5. To Delete pattern matching line
Syntax: $ sed '/pattern/d' filename.txt Example: $ sed '/abc/d' filename.txt
For more: SED command in Linux | Set 2
Advanced SED Command Examples
Below are some of the advanced SED commands that can be used for handling various editing tasks. let’s check them out:
1. Regular Expressions
SED supports regular expressions that allows it to handle more complex pattern matching. To enable regular expressions, you need to use -r option.
Example:
Here, we have matched any word start with ‘u’ and replacing it with “Linux”. Let’s check this out in the provided syntax below:
sed -r 's/\bu\w+/Linux/g' geekfile.txt
2. Insert Text
You can use this option to insert any text before or after any specific line. Here’s the syntax provided below:
sed '3i\new text' filename # Insert text before line 3
sed '3a\new text' filename # Insert text after line 3
Example: To insert a new line before line2 in geekfile.txt
sed '2i\This is a new line' geekfile.txt
Best Practices
1. Ensure to back up your files before applying for the changes. (especially while using -i)
2. Be cautious before using the extended reular expressions to avoid any unintended substitutions.
3. Always test your SED command on sample file first (to avoid unintentional changes).
Conclusion
The SED command in Linux/Unix is a versatile and powerful tool for automating text editing tasks, from simple find-and-replace operations to more complex pattern matching. Whether you’re working with a single file or need to process multiple files in a script, sed offers an efficient solution for text manipulation.
By using the above provided examples of basic and advanced, you can easily utilize the full capacity of SED to manipulate and process text files directly.
Sed Command in Linux/Unix With Examples – FAQs
What is the Sed
command in Unix?
sed
(stream editor) is a Unix utility that parses and transforms text using a simple, compact programming language.
What are examples of Sed
?
1. Replace text in a file:
sed 's/original/replacement/' filename
2. Delete lines containing a pattern:
sed '/pattern/d' filename
3. Insert a line after a match:
sed '/pattern/a\new line' filename
What is the correct syntax for using Sed
?
The basic syntax of
sed
is:sed [options] 'command' file(s)
How to use sed
in a Linux script?
In a Linux script, you can use
sed
to automate text processing tasks:#!/bin/bash input="input.txt" output="output.txt" sed 's/old/new/g' "$input" > "$output"
This script replaces all occurrences of “old” with “new” in
input.txt
and saves the result tooutput.txt
.
What is the purpose of Sed
?
The primary purpose of
sed
is to automate text processing tasks such as searching, replacing, inserting, and deleting text. It is especially useful for batch editing of files.
How to use SED to replace text in a file?
Use the following command to replace a text within a file:
sed 's/old_word/new_word/' filename
Can I delete line with SED?
Yes, you can delete lines with SED using the following command:
sed '/pattern/d' filename