2013-01-15 43 views
0

我正在編寫一個腳本函數來將包tar名稱列表分離到包名稱版本中。如何在bash中用正則表達式分隔包名?

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單獨爲Xorg-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 
} 

回答

1
$ package="Xorg-font-bitstream-75dpi-1.0.0" 
$ echo "${package%-*}" 
Xorg-font-bitstream-75dpi 
$ echo "${package##*-}" 
1.0.0 
+0

謝謝你給我的暗示。對於軟件包名稱來說它更復雜,所以我在問題中發佈我的解決方案 –

1

試試這個

sed -re '/^(.*?)((\d[a-z]?\.)+.*)$/\1\t\2/gmi' file.txt