我想从最后一个
.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 中执行此操作?谢谢。
像这样:
$ v=abc.svc.svc.cluster.local
$ echo ${v%.svc*}
abc.svc
$ v=abc.svc.cluster.local
$ echo ${v%.svc*}
abc
并且,使用
%%
来表示贪婪行为:
$ v=abc.svc.svc.cluster.local
$ echo ${v%%.svc*}
abc
根据
man bash
:
${参数%字}
${参数%%字}word 被扩展以产生一个模式,就像路径名扩展一样。如果模式与 parameter 扩展值的 尾部 匹配,则扩展的结果是 parameter 的扩展值与 最短 匹配模式(
情况)或 最长 匹配模式(%
情况)已删除。 [...]%%
像这样使用
rename
实用程序:
rename --dry-run 's{(.*)[.]svc.*}{$1}' *
对计划的更改感到满意后,删除
--dry-run
:
rename 's{(.*)[.]svc.*}{$1}' *
命令行实用程序
rename
有多种风格。他们中的大多数人应该为这项任务而努力。我使用了 Aristotle Pagaltzis 的 rename
版本 1.601。要安装 rename
,只需下载其 Perl 脚本并将其放入 $PATH
即可。或者使用 rename
安装 conda
,如下所示:
conda install rename