Shell 通过正则表达式提取子串
通过 grep
grep 的 -o 选项,可以只打印匹配的部分,否则会打印整行。
$ echo "libgcc-4.8.5-4.h5.x86_64.rpm" | grep -Eo "[0-9]+\.[0-9]+.*x86_64"
4.8.5-4.h5.x86_64
$ echo "libgcc-4.8.5-4.h5.x86_64.rpm" | grep -E "[0-9]+\.[0-9]+.*x86_64"
libgcc-4.8.5-4.h5.x86_64.rpm
复制的字符串匹配,可以通过 grep 进行多次匹配:
resnum=`echo $result | grep -Eo "Corp.*?[0-9]+.*?!"|grep -Eo "[0-9]+"`
if [[ $resnum -lt 300 ]];then
echo "start sms alarm:$resnum"
fi
通过 sed
sed 使用 \1 反向引用前面匹配的组。
但是 sed 没有只显示匹配部分的功能,会显示整行,所以采用的思路是将整行替换为子串,比较麻烦。
$ echo "libgcc-4.8.5-4.h5.x86_64.rpm" | sed -r "s/libgcc-([0-9]+\.[0-9]+.*)\.rpm/\1/g"
4.8.5-4.h5.x86_64
相关文章