たとえば、次はファイルの内容です。
$ cat file
Name=Tom
Value=10
Name=Tom
Name=Harry
Value=20
名前の後に値が表示されない場合があります。したがって、私がする必要があるのは、Name = Tomパターンを見つけて値を変更することです。ただし、名前の直後に表示される場合にのみ該当します。どうすればいいですか?
ベストアンサー1
そしてawk
:
awk 'prev ~ /^Name=(Tom|Anything)$/ && /^Value=/ {$0 = "Value=123"}
{print; prev = $0}'
または 名前そして新しい値変数に保存:
export NAME=Tom VALUE=123
awk 'prev == "Name=" ENVIRON["NAME"] && /^Value=/ {
$0 = "Value=" ENVIRON["VALUE"]
}
{print; prev = $0}'
の場合、sed
その内容は次のとおりです。
sed -e 'x;/^Name=Tom$/{g;/^Value/s/=.*/=123/;h;b' -e '}' -e g
いつものようにawk
。また、変数に格納されている任意の値を処理するために'sと同じ機能もsed
なく、単純な文字列比較を実行する機能もありません(正規表現の一致とは対照的に)。変数に 。awk
ENVIRON
sed
sed -e "x;/^Name=$NAME\$/{g;/^Value/s/=.*/=$VALUE/;h;b" -e '}' -e g
が厳密に制御されていないと、コマンドインジェクションの脆弱性になります(少なくともGNUの場合sed
)。$NAME
$VALUE