Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sed - comment a matching line and x lines after it

I need help with using sed to comment a matching lines and 4 lines which follows it. in a text file.

my text file is like this:

[myprocess-a]
property1=1
property2=2
property3=3
property4=4

[anotherprocess-b]
property1=gffgg
property3=gjdl
property2=red
property4=djfjf

[myprocess-b]
property1=1
property4=4
property2=2
property3=3

I want to prefix # to all the lines having text '[myprocess' and 4 lines that follows it expected output:

#[myprocess-a]
#property1=1
#property2=2
#property3=3
#property4=4

[anotherprocess-b]
property1=gffgg
property3=gjdl
property2=red
property4=djfjf

#[myprocess-b]
#property1=1
#property4=4
#property2=2
#property3=3

Greatly appreciate your help on this.

like image 345
Sanjan Grero Avatar asked Jul 28 '12 19:07

Sanjan Grero


Video Answer


2 Answers

You can do this by applying a regular expression to a set of lines:

sed -e '/myprocess/,+4 s/^/#/' 

This matches lines with 'myprocess' and the 4 lines after them. For those 4 lines it then inserts a '#' at the beginning of the line.

(I think this might be a GNU extension - it's not in any of the "sed one liner" cheatsheets I know)

like image 169
Flexo Avatar answered Sep 21 '22 13:09

Flexo


sed '/\[myprocess/ { N;N;N;N; s/^/#/gm }' input_file
like image 38
perreal Avatar answered Sep 20 '22 13:09

perreal