sed: Insert multiple lines before or after pattern match

In my last articles I had shown you the arguments to be used with sed to add or append any character in the beginning or end of the line and to ignore whitespace while grepping for a pattern so that the grep does not fails if there is an extra whitespace character between two words or sentence.

Here our requirement is to add multiple lines after a pattern is matched in a newline which can be before or after the match based upon the requirement

Below is our sample file /tmp/file

This is line one  
This is line two  
This is line three  
This is line four

Here in we have to put below content

your text 1  
your text 2  
your text 3

as per below requirement

  • one line before the string is matched
  • one line after the string is matched

Example 1
Here we will add our content one line before the string is matched

Solution

# sed '/This is line two/iyour text 1nyour text 2nyour text 3' /tmp/file  
This is line one  
your text 1  
your text 2  
your text 3  
This is line two  
This is line three  
This is line four

Example 2
Here we will add our content one line after the string is matched

Solution

# sed '/This is line two/ayour text 1nyour text 2nyour text 3' /tmp/file  
This is line one  
This is line two  
your text 1  
your text 2  
your text 3  
This is line three  
This is line four

How to do "in place" replacement in a file?

This can be done using "-i" flag with sed command as shown in below example.

# sed -i '/This is line two/ayour text 1nyour text 2nyour text 3' /tmp/file

IMPORTANT NOTE: Do not use in place replacement this unless you are very sure the command will not impact anything else, it is always recommended to use "i.bak" which will take a backup of the target file before doing the in place replacement

# sed -i.bak '/This is line two/ayour text 1nyour text 2nyour text 3' /tmp/file

I hope the article was useful.