Scripting

sed command

Sed command in unix:

Sed command which is used for text manipulation, which is a very important step in our bash scripting journey.

Shell-Automation Laboratories
sed command

 

 

Operating system provides some tools for text processing, one of those tools is sed. Sed command is used to work with text files like log files, configuration files and other text files.

 

Understand Sed Linux command:

Sed command edits data based on the rules you provide, you can use it like this:

$ sed options file

You are not limited to use sed to manipulate files, you apply it to the STDIN directly like this:

Don’t confuse with the term STDIN, let’s have a short brief of this term

STDIN stands for standard input which is the keyboard by default.

You can replace the STDIN which is the keyboard and replace it with a file by using the input redirect symbol (<), it sends the data as keyboard typing.

When you type the cat command without anything, it accepts input from STDIN. Any line you type, the cat command prints that line to the screen.

$ echo "Welcome to LikeGeeks page" | sed 's/page/website/'

text_manipulation_1

The s 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.

We can use sed Linux command to manipulate files as well.

This is our file:

“cat myfile”

This is a test.

$ sed 's/test/another test/' ./myfile

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.

Note: Sed Linux command doesn’t update your data. It only sends the changed text to STDOUT. The file still untouched.

 text2_Automation

Using Multiple sed Linux Commands in The Command Line:

To run multiple sed commands, you can use the -e option like this:

$ sed -e  ‘s/This/That/; s/test/another test/’ ./myfile


text3_Automation

Sed command must be separated by a semi colon without any spaces.

Also, you can use a single quotation to separate commands like this:

$ sed -e ‘

>s/This/That/

>s/test/another test/’ myfile


test4_Automation

The same result, no big deal.

Reading Commands from a file:

You can save your sed commands in a file and use them by specifying the file using -f option.

$ cat mycommands

s/This/That/

s/test/another test/

$ sed -f mycommands myfile


text5

Substituting Flags

$cat myfile

This is a test and I like this test.

This is the next test of the test scripts.

$sed ‘s/test/another test/’ myfile


text6-Automation

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.

The flags are written like this:

$ s/pattern/replacement/flags

There are four types of substitutions:

  1. ’g’ — replace all occurrences
  2. ‘A’ — Number, the occurrence number for the next text that you want to substitute
  3. ‘p’ — print the original content
  4. ‘w file’ — means write the results to a file

 

The ‘A’ Flag, you can limit your replacement by specifying the occurrence number that should be replaced like this:

$ sed ‘s/test/another test/2’ myfile 


text7-Automation

As you can see, only the second occurrence on each line was replaced.

The ‘g’ Flag, means global, which means global replacement for all occurrences:

$ sed ‘s/test/another test/g’ myfile

text8-Automation

The ‘p’ Flags, prints each line contains a pattern match, you can use the -n option to print the modified lines only.

$cat myfile

This is a test.

This is a different one.

$ sed -n ‘s/test/another test/p’ myfile

text9_Automation

The ‘w’ flag, saves the output to a specified file

$ sed ‘s/test/another test/w output’ myfile


Replace-Automation

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:

Following example with “abc” file

$ cat abc

/bin/bash

$ sed ‘s/\/bin\/bash/\/bin\/csh/’ abc

Oh!! That’s look terrible ? Don’t worry we have another option also

There is another way to achieve that. You can use the exclamation mark (!) as string delimiter like this:

$ sed ‘s!/bin/bash!/bin/csh!’ abc

Now it’s easier to read ?

 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.

You can type one number to limit it to a specific line:

$ cat myfile

This is a test.

This is the second test.

This is the third test.

This is the fourth test.

$ sed ‘2s/test/another test/’ myfile

Only line two is modified.

What about using a range of lines:

$ sed ‘2,3s/test/another test/’ myfile

text12

Also, we can start from a line to the end of the line

$ sed ‘2,$s/test/another test/’ myfile

text13

Delete Lines:

To delete lines, the delete (d) flag is used.The delete flag deletes the text from the stream, not the original file.

$ sed ‘2d’ myfile

Here we delete the second line only from myfile.

What about deleting a range of lines?

$ cat myfile

This is a test.

This is the second test.

This is the third test.

This is the fourth test.

$ sed ‘2,3d’ myfile

text15

Here we delete a range of lines, the second and the third.

Another type of ranges:

$ sed ‘3,$d’ myfile

text17

Here we delete from the third line to the end of the file.

All these examples never modify your original file.

$ sed ‘/test/d’ myfile

text20

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:

$ sed ‘/second/,/fourth/d’ myfile

text21

The first to the third line deleted.

Insert and Append Text:

You can insert or append text lines using the following flags:

  • The (i) flag.
  • The (a) flag.

 

$ echo “Another test” | sed ‘i\First test’

Insert1

 Here the text is added before the specified line.

$ echo “Another test” | sed ‘a\First test’

Insert2 

Here the text is added after the specified line.

Well, what about adding text in the middle?

Easy, look at the following example:

$ sed ‘2i\This is the inserted line.’ Myfile

I

And the appending works the same way, but look at the position of the appended text:

$ sed ‘2a\This is the appended line.’ Myfile 

 Insert4

Modifying Lines

To modify a specific line, you can use the (c) flag like this:

$ sed ‘3c\This is a modified line.’ myfile

Modify

Transform Characters

The transform flag (y) works on characters like this

$ sed ‘y/123/567/’ myfile

transform

The transformation is applied to all data and cannot be limited to a specific occurrence.

Print Line Numbers

You can print line number using the (=) sign like this:

$ sed ‘=’ myfile

Print line

However, by using -n combined with the equal sign, the sed command displays the line number that contains matching.

$ sed -n ‘/test/=’ myfile

Print2

 

Read Data from a File

You can use the (r) flag to read data from a file.

You can define a line number or a text pattern for the text that you want to read.

$ cat newfile

First line in newfile.

Second line in newfile.

$ sed ‘3r newfile’ myfile

Readdata1

The content is just inserted after the third line as expected.

And this is using a text pattern:

$ sed ‘/test/r newfile’ myfile

 Readdata2

This is just a very small intro about sed command. Sed Linux command is another world by itself.

The only limitation is your imagination.

I hope you enjoy what’ve introduced in this post about the string manipulation using sed command.

 
Divya Gupta on EmailDivya Gupta on Facebook
Divya Gupta

Leave a Reply

Your email address will not be published. Required fields are marked *