正则expression式来提取一个百分比

我有像这样的string: blabla a13724bla-bla244 35%

请注意,百分比之前总是有一个空格。 我想使用Linux shell从这些string中提取百分比数字(所以没有% )。

使用sed:

 echo blabla a13724bla-bla244 35% | sed 's/.*[ \t][ \t]*\([0-9][0-9]*\)%.*/\1/' 

如果你期望在一条线上有多个百分比,那么:

 echo blabla 20% a13724bla-bla244 35% | \ sed -e 's/[^%0-9 ]*//g;s/ */\n/g' | sed -n '/%/p' 

假设你有GNU grep:

 $ grep -oP '\d+(?=%)' <<< "blabla a13724bla-bla244 35%" 35 

你可以试试这个正则表达式:

 /\s(\d+%)/ 

你可以试试这个

 echo "blabla a13724bla-bla244 35%" | cut -d' ' -f3 | sed 's/\%//g' 

注:假设是输入始终是这种格式,百分比是第三个令牌分隔的空间。

使用这个正则表达式:

 \s(\d{1,3})% 

如果你在shell中需要它,你可以使用sed或perl单行命令:

 echo "blah 35%" | perl -pe "s/.*\s(\d{1,3})%/\1/g" 35 

如果你总是有一些连续的列,也许你应该使用awk来代替正则表达式。

 cat file.txt |awk '{print $3}' |cut -d "%" -f 1 

有了这个代码,你可以获得第三列。