[OT] sed command to add line after matching lines

Sharpe, Sam J sam.sharpe+lists.redhat at gmail.com
Thu Apr 23 11:21:57 UTC 2009


Dan Track wrote:
> Hi
>
> I appreciate this is off-topic but I would be grateful for some help
> on this. Basically,I want to add a few lines after matching a couple
> of lines in a file using sed, can someone please tell me how to do
> this.
>
> Lines to match
>
> server 10.33.45.3
> server ldap.example.com
> server orion
>
> I want to comment these lines so they become:
>
> # server 10.33.45.3
> # server ldap.example.com
> # server orion
>
> Then append these lines after the commented lines
>
> server fire.example.com
> server earth.example.com
> server space.example.com
>
>
> So I should end up with:
>
> # server 10.33.45.3
> # server ldap.example.com
> # server orion
>
> server fire.example.com
> server earth.example.com
> server space.example.com
>
> Please bear in mind there is a lot of other text in this file not just
> the above and all the other text should remain untouched.
>
I don't think you can match only when you hit three lines in succession 
because sed is supposed to operate on one line at a time, which is what 
I think you are asking for. If all you want to do is comment out each of 
those lines and add some new ones, you could try the quick and dirty way:

$ cat testfile
server 10.33.45.3
server ldap.example.com
server orion
$ cat testfile | sed -e 's/^server 10.33.45.3$/# server 10.33.45.3/g' -e 
's/^server ldap.example.com$/# server ldap.example.com/g' -e 's/^server 
orion$/# server orion\n\nserver fire.example.com\nserver 
earth.example.com\nserver space.example.com/g'
# server 10.33.45.3
# server ldap.example.com
# server orion

server fire.example.com
server earth.example.com
server space.example.com

But if your lines are out of order, then you might end up with something 
like this:

$ cat testfile2
server 10.33.45.3
server orion
server ldap.example.com
$ cat testfile2 | sed -e 's/^server 10.33.45.3$/# server 10.33.45.3/g' 
-e 's/^server ldap.example.com$/# server ldap.example.com/g' -e 
's/^server orion$/# server orion\n\nserver fire.example.com\nserver 
earth.example.com\nserver space.example.com/g'
# server 10.33.45.3
# server orion

server fire.example.com
server earth.example.com
server space.example.com
# server ldap.example.com




More information about the users mailing list