按文件名获取最大版本

时间:2014-05-14 08:32:14

标签: shell awk grep sh

我需要编写一个执行以下操作的shell脚本:

  1. 在包含符合模式的文件的给定文件夹中:update-8.1.0-v46.sql我需要找到最高版本
  2. 我需要在配置文件中找到我发现的最高版本
  3. 对于1,我找到了以下答案:Shell script: find maximum value in a sequence of integers without sorting 我唯一的问题是我无法找到只有版本的列表, 我试过了:

    ls | grep -o "update-8.1.0-v\(\d*\).sql"
    

    但我得到了整个文件名而不仅仅是匹配的部分 有任何想法吗? 也许把所有内容都移到awk

    我最终使用了:

    SCHEMA=`ls database/targets/oracle/ | grep -o "update-$VERSION-v.*.sql" | sed "s/update-$VERSION-v\([0-9]*\).sql/\1/p" | awk '$0>x{x=$0};END{print x}'`
    

    基于梦想家的回答

2 个答案:

答案 0 :(得分:2)

您可以使用sed

echo "update-8.1.0-v46.sql" | sed 's/update-8.1.0-v\([0-9]*\).sql/\1/p'

本案例中的输出为46

答案 1 :(得分:0)

grep并不是提取捕获匹配的最佳工具,但如果将其切换为使用类似perl的正则表达式,则可以使用后视断言。使用-o标志时,不会打印断言中的任何内容。

ls | grep -Po "(?<=update-8.1.0-v)\d+"
46