정규식을 사용하여 명령줄에서 숫자 추출

정규식을 사용하여 명령줄에서 숫자 추출

저는 자바스크립트 파일의 순환적 복잡성을 계산하는 도구를 사용하고 있습니다.

예:

jsc --minimal test.js

이 명령은 다음과 같은 출력을 제공합니다.

┌─────────────────────┬─────┬────────────┬─────────────────────┐
│ File                │ LOC │ Cyclomatic │ Halstead difficulty │
├─────────────────────┼─────┼────────────┼─────────────────────┤
│ /home/shray/test.js │ 23  │ 4          │ 10                  │
└─────────────────────┴─────┴────────────┴─────────────────────┘
Cyclomatic: min 4 mean 4.0 max 4
Halstead: min 10 mean 10.0 max 10

이제 나는

jsc --minimal test.js | grep "Cyclomatic:"

이것은 나에게 출력을 제공합니다

Cyclomatic: min 4 mean 4.0 max 4

이제 정규식이 있지만 Cyclomatic:[\s]*min[\s]+([0-9]+)이를 사용하여 가장 작은 Cylomatic 값을 표시하는 숫자를 추출할 수 없습니다.

터미널 출력에서 ​​최소 또는 최대 순환 복잡도 값을 출력하는 방법에 대한 도움이 필요합니까?

답변1

행의 형식이 항상 동일하다는 것을 알고 있다면 simple을 사용할 수 있습니다 cut.

cut -d' ' -f3

또는 awk첫 번째 작업을 포함하여 모든 작업을 귀하와 함께 수행하십시오 grep.

awk '$1 == "Cyclomatic:" {print $3}'

행이 변경될 수 있는 경우 다음을 사용하십시오 sed.

sed -E 's/.*( min )([0-9]+).*/\2/'

또는 grep -P다음이 있는 경우:

grep -Po ' min \K[0-9]+'

또는 정상 grep:

grep -o 'min [0-9]\+'

이는 반환되며 min 4쉽게 필터링하여 다른 항목을 추가 grep하거나cut

grep -o '[0-9]\+$'
# or
cut -d' ' -f2

답변2

Linux에서는 lookbehind를 사용합니다( -PGnu grep에서만):

jsc --minimal test.js | grep -Po '(?<=Cyclomatic: min )\d+'

(이렇게 하면 다음에 나오는 첫 번째 숫자 세트가 추출됩니다 "Cyclomatic: min ".)

관련 정보