如何查找具有多个点的文件扩展名

如何查找具有多个点的文件扩展名

我想从带有多个点的文件名中提取扩展名。例如:

gbamidi-v1.0.tar.gz

我应该得到“tar.gz”,而不是“gz”或“0.tar.gz”。

我更喜欢不依赖 bash 专有功能的解决方案(使用 posix 命令,如sedcut就可以)。

编辑:一个合理的解决方案可能是:“获取倒数第二个点之后的所有内容,但排除长度<=1的数字或子字符串”

答案1

假设扩展名以句点后的字母开头,则以下命令将打印.tar.gz

echo gbamidi-v1.0.tar.gz | awk \
    'BEGIN { FS = "\." } \
    { \
        extension = ""; \
        i = NF; \
        while ((i > 1) && (substr($i, 1, 1) ~ /[A-Za-z]/)) { \
            extension = "." $i extension; \
            i-- \
        }; \
        print extension \
    }'

答案2

这可能并非在所有情况下都有效,但.gz它是扩展。foo.tar.gz首先必须提取到 a foo.tar,然后取消存档。事实上,您可以通过一个命令来完成此操作,这一点很方便。

您需要获得延期吗?它是.gz

如果您需要其他东西,那么您将需要使用正则表达式awkcut等来定位特定的东西。

相关内容