打印文件名的前缀到特定单词

打印文件名的前缀到特定单词

我有一个如下所示的文件名,我想在 之前打印文件名.tar。我怎样才能做到这一点?

注意:后面的部分.tar是固定的,前面的部分.tar是可变的。

例子:abcd_ef_1.2.3.12+all.tar.gz.md5sum

答案1

使用 sed 例如:

sed -E 's/(.*)\.tar.*/\1/' <<< "abcd_ef_1.2.3.12+all.tar.gz.md5sum"

印刷abcd_ef_1.2.3.12+all

答案2

$ basename -s .tar.gz.md5sum 'abcd_ef_1.2.3.12+all.tar.gz.md5sum'
abcd_ef_1.2.3.12+all

参数扩展

$ s='abcd_ef_1.2.3.12+all.tar.gz.md5sum'
$ echo "${s%.tar*}"
abcd_ef_1.2.3.12+all

答案3

也许结合 find 和 sed ?

find . -maxdepth 1 -name "*.tar*" | sed 's/\(.*\)\(\.tar.*\)/\1/g'

解释:sed的第一部分

\(.*\)\(\.tar.*\)

找到 tar,但提供 2 个分组。 .tar 之前 1 个,tar 之后 1 个

sed的第二部分

\1

只取第一个分组(.tar 之前)

相关内容