Maison > Questions et réponses > le corps du texte
En PHP, j'utilise grep
pour rechercher et compter tous les cas d'utilisation de certaines classes dans presque tous les fichiers.
\exec("grep -orE '" . $classesBarred . "' ../../front/src/components | sort | uniq -c", $allClassesCount);
String-like de $classesBarred
包含类似于search-unfocused|bg-app|enlarged-window
(mais plus).
Le résultat actuel est
' 2 ../../front/src/components/Actions/ActionOwner.vue:show', ' 1 ../../front/src/components/Actions/ActionOwner.vue:action', ' 1 ../../front/src/components/Actions/ActionOwner.vue:show', ' 5 ../../front/src/components/Actions/ActionOwner.vue:action', ' 1 ../../front/src/components/Actions/ActionOwner.vue:show', ....(还有几百行类似的结果)
Je dois enregistrer les résultats dans un tableau, quelque chose comme :
[ {show: 38}, {action: 123}, {search-unfocused: 90}, {....} ]
Éditeur :
@Freeman propose une solution ici, en utilisant awk
grep -orE "btn-gray|btn-outline-white" ../../front/src/components | awk -F: '{打印 }' | awk -F/ '{print $NF}' |排序| uniq-c| awk '{print "::" }'
J'ai obtenu les résultats suivants :
btn-gray::1 btn-outline-white::13
P粉2778243782023-09-11 20:46:24
Oui, je peux voir que la sortie de votre code en utilisant awk
将 grep
est réorganisée en deux colonnes, l'une est le nom de la classe et l'autre est le nombre,
Le résultat est le suivant :
search-unfocused 90 bg-app 5 enlarged-window 12
Vous pouvez maintenant analyser cette sortie dans un tableau via PHP, le code est le suivant :
$results = array(); foreach ($allClassesCount as $line) { $parts = explode(" ", $line); $className = $parts[0]; $count = (int)$parts[1]; if (!isset($results[$className])) { $results[$className] = $count; } else { $results[$className] += $count; } }
Le résultat du tableau est le suivant :
[ "search-unfocused" => 90, "bg-app" => 5, "enlarged-window" => 12, ... ]
Mise à jour :
Si vous insistez pour utiliser awk et sed, vous pouvez faire ceci :
grep -orE "$classesBarred" ../../front/src/components | awk -F '/' '{print $NF}' | awk -F ':' '{print }' | sort | uniq -c | awk '{gsub(/^[ \t]+|[ \t]+$/, "", ); print "{\"""\": ""},"}' | paste -sd '' | sed 's/,$//' | awk '{print "["[ {"show": 38}, {"action": 123}, {"search-unfocused": 90}, {....} ]"]"}'
Les résultats sont les suivants :
rrreeeBonne chance à vous !