1、用正则取子串
原文链接:https://www.cnblogs.com/jmliao/p/11808592.html
通过试验,可以通过grep、sed两种方式实现。
假设需要提取libgcc-4.8.5-4.h5.x86_64.rpm中的版本号。
Top
grep
echo “libgcc-4.8.5-4.h5.x86_64.rpm” | grep -Eo “[0-9]+.[0-9]+.*x86_64”
grep的-o选项,可以只打印匹配的部分,否则会打印整行。
Top
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没有只显示匹配部分的功能,会显示整行,所以采用的思路是将整行替换为子串,比较麻烦。
自己的代码:
ls -l ./ | grep "CGN*_[0-9]\{3,4\}_1" | grep -o "CGN*_[0-9]\{3,4\}" > ./sample_id