从字符串中提取第一个百分比

从字符串中提取第一个百分比

I have a string:

Identities = 99/100 (99%) total 0/0 (0%)

How do I extract just the 99% (number within first parenthesis) but not the 0?

答案1

Using awk:

awk -F '[()]' '{print $2}' <<< "$string"

Output:

99%

Note: This will actually output anything within the first (...), no matter what it is.

答案2

如果该字符串位于 shell 变量中,则提取第一个十进制数字序列,后跟%.

zsh

$ string='Identities = 99/100 (99%) total 0/0 (0%)'
$ print ${(MS)string#<->%}
99%

(或者<1->%如果您想提取第一个非空百分比)

bash

$ string='Identities = 99/100 (99%) total 0/0 (0%)'
$ [[ $string =~ [0123456789]+% ]] && echo "$BASH_REMATCH"
99%

(或0*[123456789][0123456789]*%第一个非空百分比)。

POSIXly:

awk -- '
  BEGIN{
    if (match(ARGV[1], /[0123456789]+%/))
      print substr(ARGV[1], RSTART, RLENGTH)
  }' "$string"

(同样0*[123456789][0123456789]*%是第一个非空百分比)。

对于bashPOSIX 和 POSIX,$string必须包含您所在区域中的有效文本。

答案3

string='Identities = 99/100 (99%) total 0/0 (0%)'
grep -oP '^.*?\(\K([0-9][0-9]?(\.[0-9]+)?|100)%(?=\))' <<<"$string"

请注意,这将返回在(...)第一个找到的模式无效的情况下找到的第一个有效百分比,如果将返回下一个希望。


这会提取与上述相同模式匹配的字符串中所有可能的百分比:

grep -Po '(?<=\()([1-9][0-9]?(\.[0-9]+)?|100)%(?=\))' <<<"$string"

如果您还想匹配那些带有前导零的内容,例如~ ,请更改[1-9]为。[0-9]0%00%09%

[0-9]几乎所有位置仅匹配单个数字。
[0-9]?匹配相同的一或零;[0123456789]如果您只想匹配英文/ASCII 数字,请将其替换为。

答案4

这将帮助您获得所需的输出

方法一:

var='Identities = 99/100 (99%) total 0/0 (0%)'
echo ${var#*(} | sed -E 's/%*$/ /g' | sed 's/).*//'

输出 :

99%

方法2:

echo "Identities = 99/100 (99%) total 0/0 (0%) #*)" | sed -E 's/%*$/ /g' | sed 's/).*//' | cut -d'(' -f2

输出 :

99%

相关内容