假设我的文件夹中有 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
值为 的字段。由于该选项,更改是就地进行的。indoor
product
Salloon Soccer
-i
答案2
您所要做的就是在表达式中包含要匹配的内容。如果您需要行product
包含字符串*Salloon Soccer
,则匹配表达式很简单/^product: .*Salloon Soccer.*/
:
sed 's/^product: .*Salloon Soccer.*/&\nvenue: indoor/' file.txt
看man sed
。