我有一个如下所示的文件名,我想在 之前打印文件名.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 之前)