説明する

説明する

たとえば、次はファイルの内容です。

$ 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なく、単純な文字列比較を実行する機能もありません(正規表現の一致とは対照的に)。変数に 。awkENVIRONsed

sed -e "x;/^Name=$NAME\$/{g;/^Value/s/=.*/=$VALUE/;h;b" -e '}' -e g

が厳密に制御されていないと、コマンドインジェクションの脆弱性になります(少なくともGNUの場合sed)。$NAME$VALUE

おすすめ記事