如何从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扩展值的尾随部分,则扩展的结果是删除了最短匹配模式(案例)或最长匹配模式(案例)的参数扩展值。[...]%%%


以上是如何从bash中的字符串中删除非贪婪后缀?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>