sed替换匹配前一行模式的行

3

我希望知道如何使用sed替换包含某个模式的行,但前一行必须有另一个模式。我有一个包含以下内容的文本文件:

Property: ONE
Value: some_value
Property: TWO
Value: some_value
Property: THREE
Value: some_other_value

我想要找到包含some_value的行,并用另一行替换整个行或仅更新该属性行,但仅当属性行包含单词ONE时。最终结果如下所示:

Property: ONE
Value: replaced_value
Property: TWO
Value: some_value
Property: THREE
Value: some_other_value 
3个回答

5
您可以这样使用sed
sed '/Property: ONE/{n;s/Value:.*/Value: replaced_value/}' file

一旦找到模式Property: ONE,我使用n命令将下一行读入模式缓冲区,并使用s命令替换值。


0
你可以使用 awk
awk 'BEGIN{FS=OFS=": "} p {
   $2 = "replaced_value"
}
{
   p = ($0 ~ /^Property: *ONE/ ? 1 : 0)
} 1' file

Property: ONE
Value: replaced_value
Property: TWO
Value: some_value
Property: THREE
Value: some_other_value

0

只需使用awk:

$ awk 'p~/Property: ONE/{$NF="replaced_value"} {p=$0; print}' file
Property: ONE
Value: replaced_value
Property: TWO
Value: some_value
Property: THREE
Value: some_other_value

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接