문자열에서 첫 번째 백분율 추출

문자열에서 첫 번째 백분율 추출

문자열이 있습니다.

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

99%(첫 번째 괄호 안의 숫자)만 추출하고 는 추출하지 않으려면 어떻게 해야 합니까 0?

답변1

사용 awk:

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

산출:

99%

(...)참고: 이는 실제로 무엇이든 관계없이 첫 번째 내의 모든 항목을 출력합니다 .

답변2

문자열이 쉘 변수에 있는 경우 첫 번째 십진수 시퀀스를 추출한 다음 %.

그리고 zsh:

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

(또는 <1->%null이 아닌 첫 번째 백분율을 추출하려는 경우)

그리고 bash:

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

(또는 0*[123456789][0123456789]*%null이 아닌 첫 번째 비율).

POSIX적으로:

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

(다시 0*[123456789][0123456789]*%null이 아닌 첫 번째 비율).

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"

~ 와 같이 앞에 0이 있는 항목도 일치시키려면 [1-9]로 변경하세요.[0-9]0%00%09%

[0-9]거의 모든 직책은 하나의 숫자에만 일치합니다.
[0-9]?동일한 1 또는 0과 일치합니다. [0123456789]영어/ASCII 숫자만 일치시키려면 로 바꾸십시오.

답변4

이렇게 하면 원하는 결과를 얻는 데 도움이 됩니다.

방법 1:

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%

관련 정보