0

我正在编写一个脚本函数来将包 tar 球名称列表分离为包名称版本。

xorg-fonts-misc-1.0b-1
Xorg-font-bitstream-75dpi-1.0.0-2.i386
Xorg-font-bitstream-100dpi-1.2a-2.arm
Other-Third-Party-1.2.2-1-any

我正在使用以下脚本来分隔名称和版本。

split_pkgname_pipe() {  # split x-x-1.3-1.x -> x-x 1.3-1.x
  [ $opt_v != 0 ] && echo "dbg:split_pkgname_pipe $*" >&2
  awk '{
    f=$0
    sub(/\-[0-9].*$/,"")
    n=$1
    v=substr(f, length(n)+2)
    print n, v
  }'
}

我的代码的问题会导致Xorg-font-bitstream-75dpi-1.0.0分开 asXorg-font-bitstream75dpi-1.0.0. 但我想要Xorg-font-bitstream-75dpi-1.0.0

[解决了]

split_pkgname_pipe() {  # split x-x-1.3-1.x -> x-x 1.3-1.x
  [ $opt_v != 0 ] && echo "dbg:split_pkgname_pipe $*" >&2
  local line namever name ver rel
  while read line ; do
    namever="${line%-*}"
    rel="${line##*-}"
    if [ `expr match $rel '[0-9]'` = 0 ] ; then # rel is 'i386/any'...
      name="${namever%-*}"
      ver="${namever##*-}"
      namever="$name"
      rel="$ver-$rel"
    fi
    name="${namever%-*}"
    ver="${namever##*-}"
    echo "$name $ver-$rel"
  done
}
4

2 回答 2

1
$ package="Xorg-font-bitstream-75dpi-1.0.0"
$ echo "${package%-*}"
Xorg-font-bitstream-75dpi
$ echo "${package##*-}"
1.0.0
于 2013-01-15T07:21:58.520 回答
1

试试这个

sed -re '/^(.*?)((\d[a-z]?\.)+.*)$/\1\t\2/gmi' file.txt
于 2013-01-17T12:15:52.173 回答