如果先前的行匹配模式,则替换一行

时间:2016-08-10 20:14:40

标签: regex sed pattern-matching

我想知道如何替换包含模式的行,但前提是使用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 个答案:

答案 0 :(得分:2)

您可以像这样使用sed

sed '/Property: ONE/{n;s/Value:.*/Value: replaced_value/}' file

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

答案 1 :(得分: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

答案 2 :(得分: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