我正在创建一个列出所有 jboss 版本的脚本。但是我遇到了一个问题。
Jboss 通常有不同的版本名称。
jboss-4.0.0.tar.gz
jboss-4.0.4.GA.tar.gz
我设法获得了版本(例如 4.0.0 或 4.0.4)。但我需要获得所有版本 4.0.4.GA
ls -1 | grep jboss |sed -r 's/^.*-([0-9.]+)\..*/\1/'
谢谢
问问题
878 次
2 回答
3
不要解析ls
输出。
ls
是一种交互式查看文件信息的工具。它的输出是为人类格式化的,并且会导致脚本中的错误。使用globs
(就像我在这里做的那样)或find
代替。了解原因: http: //mywiki.wooledge.org/ParsingLs
$ ls -1
jboss-4.0.0.tar.gz
jboss-4.0.4.GA.tar.gz
foobar
使用grep:
$ printf -- '%s\n' * | grep -oP 'jboss-\K.*(?=\.tar\.gz)'
或使用awk:
$ printf -- '%s\n' * | awk -F'jboss-|.tar.gz' '/jboss/{print $2}'
或使用perl:
printf -- '%s\n' * | perl -lne '/jboss-(.*?)\.tar\.gz/ && print $1'
输出
4.0.0
4.0.4.GA
于 2013-04-20T12:36:38.520 回答
0
$ cat test.sh
#!/bin/bash
for file in jboss-*.tar.gz; do
[ -f "${file}" ] || continue
version="${file#*-}"
version="${version%.tar.gz}"
echo "${version}"
done
例子:
$ find
.
./test.sh
./jboss-4.0.0.tar.gz
./jboss-4.0.4.GA.tar.gz
$ ./test.sh
4.0.0
4.0.4.GA
于 2013-04-20T12:35:54.780 回答