3

我有如下字符串:blabla a13724bla-bla244 35%

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

4

6 回答 6

4

假设你有 GNU grep:

$ grep -oP '\d+(?=%)' <<< "blabla a13724bla-bla244 35%"
35
于 2012-12-21T12:03:40.033 回答
3

使用 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'
于 2012-12-21T07:13:40.230 回答
1

你可以试试这个

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

注意:假设输入始终采用这种格式,百分比是用空格分隔的第三个标记。

于 2012-12-21T06:59:44.223 回答
0

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

/\s(\d+%)/
于 2012-12-21T06:58:18.603 回答
0

使用这个正则表达式:

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

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

echo "blah 35%" | perl -pe "s/.*\s(\d{1,3})%/\1/g"
35
于 2012-12-21T06:59:01.707 回答
0

如果您总是有许多连续的列,也许您应该尝试使用 awk 而不是常规表达式。

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

使用此代码,您可以获得第三列。

于 2012-12-21T07:11:59.010 回答