Thursday, 27 May 2021

Sed Command

 

Sed Command

it can perform lot’s of function on file like, searching, find and replace, insertion or deletion. Though most common use of SED command in UNIX is for substitution or for find and replace.

 

  • SED is a powerful text stream editor. Can do insertion, deletion, search and replace(substitution).
  • SED command in unix supports regular expression which allows it perform complex pattern matching.

 

Syntax:

sed OPTIONS... [SCRIPT] [INPUTFILE...] 
 
$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
 

 

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

 

·  Replacing the nth occurrence of a pattern in a line : 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.

 

Replacing all the occurrence of the pattern in a line : 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

·  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.

 

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.

 

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

 

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

 

$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.

 

·  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

5. To Delete from nth to last line

Syntax:

$ sed 'nth,$d' filename.txt

Example:

$ sed '12,$d' filename.txt

6. To Delete pattern matching line

Syntax:

$ sed '/pattern/d' filename.txt

Example:

$ sed '/abc/d' filename.txt

 

Viewing a range of lines of a document

# sed -n '5,10p' myfile.txt

 

Viewing the entire file except a given range

# sed '20,35d' myfile.txt

 

Viewing non-consecutive lines and ranges

Let’s display lines 5-7 and 10-13 from myfile.txt:

 

# sed -n -e '5,7p' -e '10,13p' myfile.txt

 

Replacing words or characters (basic substitution)

# sed 's/version/story/g' myfile.txt

 

# sed 's/version/story/gi' myfile.txt

 

To replace multiple blank spaces with a single space,

 

sed 's/  */ /g'

 

Replacing words or characters inside a range

# sed '30,40 s/version/story/g' myfile.txt

 

Switching pairs of words

Let’s suppose you have a file containing full names in the format First name, Last name. To adequately process the file, you may want to switch Last name and First name.

We can do that with sed fairly easily:

# sed 's/^\(.*\),\(.*\)$/\, /g' names.txt

 

 

In the image above we can see that parentheses, being special characters, need to be escaped, as do the numbers 1 and 2.

These numbers represent the highlighted regular expressions (which need to appear inside parentheses):

  1. 1 represents the beginning of each line up to the comma.
  2. 2 is a placeholder for everything that is right of the comma to the end of the line.

The desired output is indicated in the format SecondColumn (Last name) + comma + space + FirstColumn (First name).

 

Replacing words only if a separate match is found

For example, we may want to replace start with stop only if the word services is found in the same line. In that scenario, here’s what will happen:

We need to start partying at work,

but let’s remember to start all services first.

In the first line, start will not be replaced with stop since the word services does not appear in that line, as opposed to the second line.

# sed '/services/ s/start/stop/g' msg.txt

 

No comments: