Linux
SED - 僅當匹配 OTHER LINE 中的某些單詞時才生成行
假設我在一個文件夾中有 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
。