如何从bash中的字符串中删除非贪婪后缀?

问题描述 投票:0回答:2

我想从最后一个

.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 中执行此操作?谢谢。

bash file-rename
2个回答
6
投票

像这样:

$ 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 的扩展值与 最短 匹配模式(

    %
    情况)或 最长 匹配模式(
    %%
    情况)已删除。 [...]


0
投票

像这样使用

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
© www.soinside.com 2019 - 2024. All rights reserved.