通过试验,可以通过grep、sed两种方式实现。
假设需要提取libgcc-4.8.5-4.h5.x86_64.rpm中的版本号。
grep
echo "libgcc-4.8.5-4.h5.x86_64.rpm" | grep -Eo "[0-9]+\.[0-9]+.*x86_64"
grep的-o选项,可以只打印匹配的部分,否则会打印整行。
sed
echo "libgcc-4.8.5-4.h5.x86_64.rpm" | sed -r "s/libgcc-([0-9]+\.[0-9]+.*)\.rpm/\1/g"
sed使用\1反向引用前面匹配的组。
但是sed没有只显示匹配部分的功能,会显示整行,所以采用的思路是将整行替换为子串,比较麻烦。