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

答え2

あなたがしなければならないことは、式に一致させたいものを含めることだけです。product文字列を含む行が必要な場合、一致*Salloon Soccerする式は簡単です/^product: .*Salloon Soccer.*/

sed 's/^product: .*Salloon Soccer.*/&\nvenue: indoor/' file.txt

望むよりman sed

関連情報