文字列の先頭を一致させ、bashでパターンを使用して特定の値を置き換える方法

文字列の先頭を一致させ、bashでパターンを使用して特定の値を置き換える方法
vm0 host=10.182.35.1 controller=True
vm1 host=10.182.35.2 controller=False solution=abc
vm2 host=10.182.35.3 controller=True solution=abc
vm3 host=10.182.37.4 controller=False solution=xyz
vm4 host=10.182.37.5 controller=True solution=abc
vm5 host=10.182.35.6 controller=True solution=aaa
vm6 host=10.182.37.7 controller=False solution=bbb

上記のテストはファイルにありますfile1.txt。次のように変更したいと思います。

  • 最初の3つのVMについてはcontroller=True
  • 後続のすべてのVM(3番目のVMから始まる)はcontroller=False

上記のコードスニペットには前後に何かがあるため、行番号を使用してこれを行うことはできません。

文字列の先頭を一致させ、それに応じて変更する必要があります。

したがって、出力は次のようになります

vm0 host=10.182.35.1 controller=True
vm1 host=10.182.35.2 controller=True solution=abc
vm2 host=10.182.35.3 controller=True solution=abc
vm3 host=10.182.37.4 controller=False solution=xyz
vm4 host=10.182.37.5 controller=False solution=abc
vm5 host=10.182.35.6 controller=False solution=aaa
vm6 host=10.182.37.7 controller=False solution=bbb

ファイルを変更するには?

ベストアンサー1

私は以下を使用しますperl

perl -pe 's/controller=\K\w+/++$n <= 3 ? "True" : "False"/e if /^vm\d+\s/' file

-in-placeファイル編集iオプションが追加されました。

おすすめ記事