我需要编写一个执行以下操作的shell脚本:
update-8.1.0-v46.sql
我需要找到最高版本对于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}'`
基于梦想家的回答
答案 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