使用目录我有多个文件在文件中有多个版本号。我在这些版本号的目录中搜索每个文件,对它们进行排序以获取最新的版本号,然后将其汇总到“tail -1”中,只传递给最新的版本号而不是每个grep结果。
数据看起来像这样:
file1:asdf garbage 1.2.4.1 garbagetext asdf
file2:fsdaf garbage asdfsda 4.3.2.10 fdsaf
等等。我已经完成了提取最新版本号的工作。我用以下方法做到了这一点:
grep -o '[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}' * | sort | tail -1
下一部分就是我遇到的麻烦。我试图在第一个句点之前提取数字(无论是一个数字字符还是两个数字字符)并返回该结果。然后,我假设一个略有不同的命令做同样的事情,但对于第一个时期后的数字。再次为第二期后的数字,最后是第三期后的数字。
我对sed或awk几乎没有经验,但经过一番研究后,我相信这些工具中的任何一种都是实现这一目标的方法。
谢谢!
编辑:好吧,我明白了,但我确信这可以通过更简单的方式完成。我所拥有的是以下内容:
grep -o '[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}' * | sort | tail -1 | grep -o '[0-9]\{1,\}' | sed -n 2p
或sed -n 1p,3p,4p取决于我想要的值。
答案 0 :(得分:1)
获取最新版本号:
grep -P -o "\d+\.\d+\.\d+\.\d+" * |sed 's/.*://g'|awk -F'.' '{v[$0]=($1"."$2$3$4)+0;}END{m=0;for(x in v)if(v[x]>m){m=v[x];n=x;}print n}'
提取数字:
kent$ echo "10.2.30.4"|awk -F'.' -v OFS="\n" '$1=$1'
10
2
30
4
你可以将两条线放在一起。
答案 1 :(得分:0)
要提取版本号,而不必知道其中有多少个点,我会使用
grep -o '[0-9.]\+' filename | sort --version-sort | tail -1
(假设你有GNU排序,--version-sort
选项)
要获得主要版本号,请将上述内容输入
之一sed 's/\..*//'
while read line; do echo ${line%%.*}; done