Linux - Unix - Sed Commands
Linux - Unix - Sed Commands
In this post, we are going to focus on sed Linux command which is used for text manipulation.
Linux system provides some tools for text processing, one of those tools is sed.
We will discuss the some examples with pictures to show the output of every example.
Table of Contents
You are not limited to use sed to manipulate files, you apply it to the STDIN directly like this:
This command replaces the first text with the second text pattern. In this case, the string “website”
was replaced with the word “page”, so the result will be as shown.
The above example was a very basic example to demonstrate the tool. We can use sed Linux
command to manipulate files as well.
The results are printed to the screen instantaneously, you don’t have to wait for processing the file to
the end.
If your file is huge enough, you will see the result before the processing is finished.
Sed Linux command doesn’t update your data. It only sends the changed text to STDOUT. The file
still untouched. If you need to overwrite the existing content, you can check our previous post which
was talking about redirections.
Also, you can use a single quotation to separate commands like this:
1 $ sed -e '
2
3 > s/This/That/
4
5 > s/test/another test/' myfile
The same result, no big deal.
Substituting Flags
$ cat myfile
$ sed 's/test/another test/' myfile
The above result shows the first occurrence in each line is only replaced. To substitute all occurrences
of a pattern, use one of the following substitution flags.
s/pattern/replacement/flags
You can limit your replacement by specifying the occurrence number that should be replaced like this:
As you can see, only the second occurrence on each line was replaced.
The g flag means global, which means a global replacement for all occurrences:
$ cat myfile
$ sed -n 's/test/another test/p' myfile
The output is printed on the screen, but the matching lines are saved to the output file.
Replace Characters
Suppose that you want to search for bash shell and replace it with csh shell in the /etc/passwd file
using sed, well, you can do it easily:
Luckily, there is another way to achieve that. You can use the exclamation mark (!) as string delimiter
like this:
Limiting sed
Sed command processes your entire file. However, you can limit the sed command to process specific
lines, there are two ways:
A range of lines.
A pattern that matches a specific line.
Awesome!!
You can use regular expressions to write this pattern to be more generic and useful.
Delete Lines
To delete lines, the delete (d) flag is your friend.
The delete flag deletes the text from the stream, not the original file.
$ sed '2d' myfile
Here we delete from the third line to the end of the file.
All these examples never modify your original file.
Here we use a pattern to delete the line if matched on the first line.
If you need to delete a range of lines, you can use two text patterns like this:
And the appending works the same way, but look at the position of the appended text:
Modifying Lines
To modify a specific line, you can use the (c) flag like this:
You can use a regular expression pattern and all lines match that pattern will be modified.
The transformation is applied to all data and cannot be limited to a specific occurrence.
You can define a line number or a text pattern for the text that you want to read.
$ cat newfile
$ sed '3r newfile' myfile
The content is just inserted after the third line as expected.
Cool right?
Useful Examples
We have a file that contains a text with a placeholder and we have another file that contains the data
that will be filled in that placeholder.
1 $ Sed '/DATA>/ {
2
3 r newfile
4
5 d}' myfile
Awesome!! as you can see, the placeholder location is filled with the data from the other file.
This is just a very small intro about sed command. Actually, sed Linux command is another world by
itself.
I hope you enjoy what’ve introduced today about the string manipulation using sed Linux command.
Thank you.