
私のフォルダに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
これにより、最上位フィールドに文字列を含むすべてのファイルに値を含むフィールドが追加されます。このオプションのおかげで、変更はすぐに有効になります。indoor
product
Salloon Soccer
-i
答え2
あなたがしなければならないことは、式に一致させたいものを含めることだけです。product
文字列を含む行が必要な場合、一致*Salloon Soccer
する式は簡単です/^product: .*Salloon Soccer.*/
。
sed 's/^product: .*Salloon Soccer.*/&\nvenue: indoor/' file.txt
望むよりman sed
。