我想从带有多个点的文件名中提取扩展名。例如:
gbamidi-v1.0.tar.gz
我应该得到“tar.gz”,而不是“gz”或“0.tar.gz”。
我更喜欢不依赖 bash 专有功能的解决方案(使用 posix 命令,如sed
或cut
就可以)。
编辑:一个合理的解决方案可能是:“获取倒数第二个点之后的所有内容,但排除长度<=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
。
如果您需要其他东西,那么您将需要使用正则表达式awk
、cut
等来定位特定的东西。