sed 如果前一行匹配模式则替换一行

Aar*_*lli 3 regex sed pattern-matching

我想知道如何使用 sed 替换包含模式的行,但前提是前一行具有另一个模式。我有一个包含以下内容的文本文件:

Property: ONE
Value: some_value
Property: TWO
Value: some_value
Property: THREE
Value: some_other_value
Run Code Online (Sandbox Code Playgroud)

因此,我想找到包含some_value的行,并将整行替换为另一行,或者仅更新值,但前提是属性行包含单词ONE。最终结果看起来像这样

Property: ONE
Value: replaced_value
Property: TWO
Value: some_value
Property: THREE
Value: some_other_value 
Run Code Online (Sandbox Code Playgroud)

hek*_*mgl 5

sed你可以这样使用:

sed '/Property: ONE/{n;s/Value:.*/Value: replaced_value/}' file
Run Code Online (Sandbox Code Playgroud)

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