2016-08-10 14 views
1

以前の行にsedを使用した別のパターンがある場合のみ、パターンを含む行をどのように置き換えることができるかを知りたいと思います。私は、次を含むテキストファイルがあります。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 

答えて

2

を使用することができるようになりますでしょう:パターンProperty: ONEが見つかったら

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

、私は次を読みますnコマンドを使用してパターンバッファに入力し、sコマンドを使用して値を置き換えます。

+0

それは魔法のように動作します!ありがとうございました –

0

あなたはこのようsedを使用することができます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 
関連する問題