如何从bash中的字符串中删除非贪婪后缀?
我想从以最后一个开头的字符串中删除任何后缀.svc.。例如:
abc.svc.cluster.local => abc
abc.svc.svc.cluster.local => abc.svc
abc.txt => abc.txt
abc.svc.xyz.svc.zzz => abc.svc.xyz
svc.xxx=> svc.xxx(.在 svc 之前丢失)
如果我这样做是Go,我会找到子字符串的最后一个索引,.svc.然后从该索引中修剪。
我如何在 bash 中做到这一点?谢谢。
回答
像这样:
[STEP 101] $ v=abc.svc.svc.cluster.local
[STEP 102] $ echo ${v%.svc*}
abc.svc
[STEP 103] $ v=abc.svc.cluster.local
[STEP 104] $ echo ${v%.svc*}
abc
[STEP 105] $
并且,%%用于贪婪行为:
[STEP 105] $ v=abc.svc.svc.cluster.local
[STEP 106] $ echo ${v%%.svc*}
abc
[STEP 107] $
根据man bash:
${parameter%word}
${parameter%%word}这个 词 被扩展以产生一个模式,就像在路径名扩展中一样。如果模式匹配parameter扩展值的尾随部分,则扩展的结果是删除了最短匹配模式(案例)或最长匹配模式(案例)的参数扩展值。[...]
%%%