【问题标题】:Regular expression to extract a percentage提取百分比的正则表达式
【发布时间】:2012-12-08 18:25:11
【问题描述】:

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

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

【问题讨论】:

  • 你试过(\d+)%吗?

标签: regex linux shell


【解决方案1】:

假设你有 GNU grep:

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

【讨论】:

  • 如果百分比是小数,例如 99.99%:grep -oP '[\.\d]+(?=%)'
  • 虽然这将匹配foo.%。对于任意浮点数,我会使用[-+]?(?:\d+(?:\.\d*)?)|(?:\d*\.\d+)(?=%)——这将确保您在那里至少获得一位数字。
【解决方案2】:

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

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

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

【讨论】:

  • 您没有删除百分比字符。
  • 对不起,我忘记添加剪切命令 cat file.txt |awk '{print $3}' |cut -d "%" -f 1
【解决方案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'

【讨论】:

  • 这不适用于 100%(双关语)- 只允许最多 2 位数字
【解决方案4】:

使用这个正则表达式:

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

如果你在 shell 中需要它,你可以使用 sed 或者这个 perl one-liner:

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

【讨论】:

    【解决方案5】:

    你可以试试这个

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

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

    【讨论】:

      【解决方案6】:

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

      /\s(\d+%)/
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 2021-03-04
        • 1970-01-01
        相关资源
        最近更新 更多