SED - 他の行の特定の単語と一致する場合にのみ行を生成する

SED - 他の行の特定の単語と一致する場合にのみ行を生成する

私のフォルダに2つのファイルがあるとしましょう。

...
product: Nike New Awesome Running Shoe
price: 123
color: black
...
...
product: Nike New Awesome Salloon Soccer Shoe
price: 123
color: black
...

次のシナリオを完了する必要があります。シングルSEDコマンドの使用, *.txt を使用するすべてのファイルで

Salloon Soccer文字列が含まれている場合は(product:)行を検索する必要があります(これは例であり、他の用語/文字列である可能性があります)。

検索は製品のみを検索する必要があります:LINE

そして、その文字列が含まれている場合にのみ(venue:Interior)を使用して新しい行を作成します。 「検索語」を含まない他のファイルは変更されません。以下の2つのファイルの結果を見てください。

...
product: Nike New Awesome Running Shoe
price: 123
color: black
...
...
product: Nike New Awesome Salloon Soccer Shoe
venue: indoor
price: 123
color: black
...

ベストアンサー1

このファイルが有効なYAMLファイルであると仮定すると、Andrey Kislyukのファイルを使用してyqください他の質問に対する私の答え):

yq -y -i '
    if (.product | contains("Salloon Soccer")) then
        .venue = "indoor"
    else
        empty
    end' *.txt

venueこれにより、最上位フィールドに文字列を含むすべてのファイルに値を含むフィールドが追加されます。このオプションのおかげで、変更はすぐに有効になります。indoorproductSalloon Soccer-i

おすすめ記事