sed - 注释匹配的行和后面的x行

时间:2012-07-28 19:15:00

标签: sed text-manipulation

我需要帮助使用sed来评论匹配的行和它后面的4行。 在文本文件中。

我的文字文件是这样的:

[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

我想在所有带有文本'[myprocess'的行和前面跟着它的4行前面加上# 预期产出:

#[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

非常感谢您对此的帮助。

3 个答案:

答案 0 :(得分:15)

您可以通过将正则表达式应用于一组行来完成此操作:

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

这匹配'myprocess'的行和它们后面的4行。对于这4行,然后在行的开头插入一个'#'。

(我认为这可能是一个GNU扩展 - 它不在我所知道的任何“sed one liner”备忘单中)

答案 1 :(得分:3)

sed '/\[myprocess/ { N;N;N;N; s/^/#/gm }' input_file

答案 2 :(得分:1)

awk中使用字符串连接和默认操作 http://www.gnu.org/software/gawk/manual/html_node/Concatenation.html

awk '/myprocess/{f=1} f>5{f=0} f{f++; $0="#" $0} 1'  foo.txt

或者块总是以空行结束

awk '/myprocess/{f=1} !NF{f=0} f{$0="#" $0} 1'  foo.txt