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 的文件中

我需要在 (product:) 行中搜索它是否包含字符串 Salloon Soccer (这是一个示例,它可能是其他术语/字符串)。

搜索必须仅适用于产品: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

相关内容