如何解决如何从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}word 被扩展以产生一个模式,就像在路径名扩展中一样。如果模式匹配参数扩展值的尾随部分,那么扩展的结果是参数扩展值与最短匹配模式(
%
案例)或最长匹配模式(%%
案例)。 [...]
像这样使用 rename
实用程序:
rename --dry-run 's{(.*)[.]svc.*}{$1}' *
如果对计划的更改感到满意,请删除 --dry-run
:
rename 's{(.*)[.]svc.*}{$1}' *
命令行实用程序 rename
有多种形式。他们中的大多数应该为这项任务工作。我使用了亚里士多德 Pagaltzis 的 rename
1.601 版。要安装 rename
,只需下载其 Perl 脚本并将其放入 $PATH
。或者使用 rename
安装 conda
,如下所示:
conda install rename
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。