Pour le texte suivant, je dois compter les lignes dont le nombre entre parenthèses est compris entre [10-20].

This function's cyclomatic complexity is too high. (1)
This function's cyclomatic complexity is too high. (2)
This function's cyclomatic complexity is too high. (3)
This function's cyclomatic complexity is too high. (4)
This function's cyclomatic complexity is too high. (5)
This function's cyclomatic complexity is too high. (6)
This function's cyclomatic complexity is too high. (7)
This function's cyclomatic complexity is too high. (8)
This function's cyclomatic complexity is too high. (9)
This function's cyclomatic complexity is too high. (10)
This function's cyclomatic complexity is too high. (12)
This function's cyclomatic complexity is too high. (13)
This function's cyclomatic complexity is too high. (14)
This function's cyclomatic complexity is too high. (15)
This function's cyclomatic complexity is too high. (16)
This function's cyclomatic complexity is too high. (17)

J'essaye les commandes suivantes:

cat pruebascript.txt | grep -c "This function's cyclomatic complexity is too high. ([10-20])"
cat pruebascript.txt | grep -c "This function's cyclomatic complexity is too high. ([10,11,12,13,14,15,16,17,18,20])"

Mais n'a pas fonctionné. Quelle est la bonne façon de le faire?

3
Rashomon 16 nov. 2017 à 15:48

4 réponses

Meilleure réponse
grep -c "(1[0-9])\|(20)" filename
3
tso 16 nov. 2017 à 13:21

Pour répertorier des chaînes distinctes pour grep, entourez-les de \(\) et séparez-les par \|, comme ceci:

$ grep "This function's cyclomatic complexity is too high. (\(10\|11\|12\))" file
This function's cyclomatic complexity is too high. (10)
This function's cyclomatic complexity is too high. (12)
1
James Brown 16 nov. 2017 à 13:28

Je n'ai pas accès à un terminal donc ceci n'est pas testé, mais essayez cat pruebascript.txt | grep -c "This function's cyclomatic complexity is too high. (1[0-9]|20)". Votre expression régulière dans grep demande 1 ou 2 et 2 ou 0.

1 [0-9] correspondra à tout ce qui est compris entre 10 et 19 ainsi que 20.

En savoir plus sur les plages numériques regex: https://www.regular-expressions.info/numericranges.html

1
JCJ 16 nov. 2017 à 12:56

grep n'est pas le bon outil. Vous ne voulez pas utiliser une expression régulière pour faire une comparaison numérique. Essayer:

awk "/This function's cyclomatic complexity is too high./"'$2 >= 10 && $2 <=20 {c++} END {print c}' FS='[()]' pruebascript.txt

Notez que vous pouvez probablement simplifier en:

awk '$2 >= 10 && $2 <=20 {c++} END {print c}' FS='[()]' pruebascript.txt

En fonction de vos données réelles.

1
William Pursell 16 nov. 2017 à 12:54
47330069