Bash 读取文件名并使用 awk 返回版本号



我正在尝试使用一两行 Bash(可以在命令行中运行(来读取文件夹名称并返回名称中的版本。

因此,如果我有myfolder_v1.0.13我知道我可以使用echo "myfolder_v1.0.13" | awk -F"v" '{ print $2 }'并且它会以1.0.13返回。

但是如何让 shell 使用 awk 命令读取文件夹名称和管道,以便在不使用 echo 的情况下给我相同的结果?我想我总是可以导航到目录并以某种方式将pwd的输出转换为变量?

提前谢谢。

编辑:我一问就想通了。我可以使用

result=${PWD##*/}; echo $result | awk -F"v" '{ print $2 }'

它给了我想要的东西。我会把这个问题留给其他人参考,除非有人希望我把它拿下来。

但是

你根本不需要Awk,这里只需使用bash参数扩展。

string="myfolder_v1.0.13"
printf "%sn" "${string##*v}"
1.0.13
您可以使用

basename "$(cd "foldername" ; pwd )" | awk -Fv '{print $2}'

让 shell 给你目录名,但如果你真的想使用 shell,你也可以完全避免使用 awk:假设您有参数"FOLDERNAME"中版本号的文件夹的路径:

echo "${FOLDERNAME##*v}"

这将删除与参数 FOLDERNAME 值中的 glob 表达式"*v"匹配的最长前缀。

最新更新