我正在使用一个工具来计算 javascript 文件的循环复杂度。
例子:
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
如果您知道该行始终具有相同的格式,则可以使用简单的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 中,使用后视(-P
仅在 Gnu grep 中):
jsc --minimal test.js | grep -Po '(?<=Cyclomatic: min )\d+'
(这会提取后面的第一组数字"Cyclomatic: min "
)。