14

我需要帮助来使用 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

非常感谢您对此的帮助。

4

3 回答 3

22

您可以通过将正则表达式应用于一组行来做到这一点:

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

这将匹配带有 'myprocess' 的行以及它们之后的 4 行。对于这 4 行,它会在行首插入一个“#”。

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

于 2012-07-28T19:32:04.400 回答
3
sed '/\[myprocess/ { N;N;N;N; s/^/#/gm }' input_file
于 2012-07-28T19:37:14.543 回答
2

在. _ _ http://www.gnu.org/software/gawk/manual/html_node/Concatenation.htmlawk

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
于 2012-07-28T22:17:55.047 回答