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-bitstream
和75dpi-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
}
謝謝你給我的暗示。對於軟件包名稱來說它更復雜,所以我在問題中發佈我的解決方案 –