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?
4 réponses
grep -c "(1[0-9])\|(20)" filename
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)
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
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.
De nouvelles questions
bash
Pour des questions sur les scripts écrits pour le shell de commande Bash. Pour les scripts shell avec des erreurs / erreurs de syntaxe, veuillez les vérifier avec le programme shellcheck (ou sur le serveur web shellcheck à https://shellcheck.net) avant de poster ici. Les questions sur l'utilisation interactive de Bash sont plus susceptibles d'être sur le sujet sur Super User que sur Stack Overflow.