我有一个很大的 bash 文件,其中有很多这样的行:
... --env COMP_LABELS="service:service1" ...
其中 service1 每行都不同。 (有时是service:mgmt
或service:admin
)。
我正在尝试生成一些命令(可能是 sed),该命令会在结束引号 ( "
) 之前附加以下字符串:,branch:$branch
。
所以在第一个例子中,它会变成:
... --env COMP_LABELS="service:service1,branch:$branch" ...
可以做吗?先谢谢了!
(我尝试做类似的事情sed -i 's/OMP_LABELS=\"service:.*\"/<not sure what to put here since I need to the entire word>/g' filename
,但我不知道如何完成)
答案1
"
使用 sed,您可以简单地匹配第一个之后的一系列非字符"
:
$ echo '... --env COMP_LABELS="service:service1" ...' |
sed 's/COMP_LABELS="[^"]*/&,branch:$branch/'
... --env COMP_LABELS="service:service1,branch:$branch" ...
这里/COMP_LABELS="[^"]*/
匹配字符串COMP_LABELS="
后跟 0 个或多个非"
字符(^
是否定运算符),然后/&,branch:$branch/
将其替换为 LHS 上匹配的内容(&
是反向引用),后跟字符串,branch:$branch