1

I have:

/var/cache/pacman/pkg/vim-runtime-7.3.754-1-x86_64.pkg.tar.xz
/var/cache/pacman/pkg/vim-7.3.918-2-x86_64.pkg.tar.xz

Format is:

cachedir               package     packageVersion packageRelease architecture extesnion
/var/cache/pacman/pkg/ vim-runtime 7.3.754        1              x86_64       pkg.tar.xz
/var/cache/pacman/pkg/ vim         7.3.918        2              x86_64       pkg.tar.xz

So Id like to end up with being able to extract any on of those from the original string *Packages can have hyphens in their name

Any help would be appretiated

4

3 回答 3

1

basename与 一起使用sed

basename "/var/cache/pacman/pkg/vim-runtime-7.3.754-1-x86_64.pkg.tar.xz" \
| sed 's/\([a-z\-]*\)\-\(.*\)/\1/i'

输出:

vim-runtime  # or ..
vim
于 2013-06-20T13:09:52.870 回答
0

像那样:

var='/var/cache/pacman/pkg/vim-runtime-7.3.754-1-x86_64.pkg.tar.xz'; basename ${var%%-[0-9]*}
于 2013-06-20T13:15:09.927 回答
0

提示:

$ cachedir=$(dirname /var/cache/pacman/pkg/vim-runtime-7.3.754-1-x86_64.pkg.tar.xz)
$ printf '%s\n' "$cachedir"
/var/cache/pacman/pkg

$ basename=$(basename /var/cache/pacman/pkg/vim-runtime-7.3.754-1-x86_64.pkg.tar.xz)
$ printf '%s\n' "$basename"
vim-runtime-7.3.754-1-x86_64.pkg.tar.xz

$ IFS=- read -a components <<< "$basename"
$ printf '%s\n' "${components[@]}"
vim
runtime
7.3.754
1
x86_64.pkg.tar.xz

$ printf '%s\n' "${components[-1]}"
x86_64.pkg.tar.xz

$ extension="${components[-1]#*.}"
$ printf '%s\n' "$extension"
pkg.tar.xz

$ architecture="${components[-1]%%.*}"
$ printf '%s\n' "$architecture"
x86_64

$ packageRelease="${components[-2]%%.*}"
$ printf '%s\n' "$packageRelease"
1

$ packageVersion="${components[-3]}"
$ printf '%s\n' "$packageVersion"
7.3.754

$ package=$(echo "${components[@]:0:$((${#components[@]} - 3))}" | tr -s ' ' '-')
$ printf '%s\n' "$package"
vim-runtime
于 2013-06-20T13:06:53.043 回答