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