我需要帮助使用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
非常感谢您对此的帮助。
答案 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