Linux

SED - 僅當匹配 OTHER LINE 中的某些單詞時才生成行

  • March 29, 2022

假設我在一個文件夾中有 2 個文件

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

我需要在使用 *.txt 的所有文件中使用單個 SED 命令完成以下場景

如果它包含字元串 Salloon Soccer,我需要在 (product:) 行中搜尋(這是一個範例,它可能是另一個術語/字元串)。

搜尋必須僅適用於產品:LINE

並且僅當包含該字元串時,使用(地點:室內)創建一個新行,另一個不包含“搜尋詞”的文件保持不變。看看下面的 2 個文件結果:

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

假設這些文件是有效的 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

您所要做的就是在表達式中包含您想要匹配的任何內容。如果您要求該product行包含字元串*Salloon Soccer,則匹配表達式很簡單/^product: .*Salloon Soccer.*/

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

man sed

引用自:https://unix.stackexchange.com/questions/697158