如何提取具有相同后缀的文件名的第一部分?

如何提取具有相同后缀的文件名的第一部分?

我想获取可变长度文件名的前缀。

In: some_filename_123-uniq.tar.gz
Out: some_filename_123
In: some_filename_1-uniq.tar.gz
Out: some_filename_1

这与我想要的完全相反-uniq.tar.gz

result=$(echo *-uniq.tar.gz | rev | cut -c-12 | rev)
echo $result

只会有一个-uniq.tar.gz带后缀的项目。

我尝试使用参数替换,这似乎是最简单的方法,但出现语法错误:

${"some_filename_123-uniq.tar.gz"//"-uniq.tar.gz"}
bash: ${"some_filename_123-uniq.tar.gz"/""/"-uniq.tar.gz"}: bad substitution

答案1

我尝试使用参数替换,这似乎是最简单的方法

最简单的方法(只要记住,顾名思义 - 正如评论中指出的那样,shell扩展参数/变量);
用于${var%-*}(不情愿地)删除后缀(在本例中从最后一个开始-):

for f in ./*-uniq.tar.gz
do
printf %s\\n "${f%-*}"   
done

${var:offset:length}删除最后一个字符(其中长度是负整数):

for f in ./*-uniq.tar.gz
do
printf %s\\n "${f:0:-12}"
done

答案2

这是一种快速而肮脏的方法,只需使用 sed 将该字符串替换为空(删除):

for i in *-uniq.tar.gz
do
result=$(echo $i | sed 's/-uniq.tar.gz$//')
echo "$result"
done

上面的代码将遍历一个目录,查找以 -uniq.tar.gz 结尾的任何内容,然后在删除结尾部分后回显结果。

相关内容