Si të numëroni të gjitha ndeshjet e një vargu me grep për Linux
grep
është një mjet kërkimi teksti që mund të funksionojë me hyrje standarde ose skedarë të shumtë në të njëjtën kohë. Përdoret për të printuar ndeshjet për modele, vargje ose shprehje të rregullta. Shpesh është e dobishme të jesh në gjendje të numërosh numrin e ndeshjeve, gjë që grep
mund t'i bëjë shumë lehtë.
Numërimi i ndeshjeve me grep
Komanda grep
ka flamurin -c
, i cili do të numërojë numrin e rreshtave që përputhen dhe do të printojë një numër. Kjo është e dobishme për shumë gjëra, të tilla si kërkimi nëpër skedarë log për numrin e hyrjeve nga një IP e grimcave, pikë fundore ose identifikues tjetër.
grep -c "1.2.3.4" /var/log/nginx/access.log
Megjithatë, grep
është në gjendje të përputhet shumë herë për rresht. Nëse përdorni flamurin -o
, grep
do të printojë një rresht të ri për ndeshje. Kjo nuk funksionon me flamurin -c
, pasi do të numërojë vetëm linjat që përputhen, jo shumë përputhje për rresht.
Një zgjidhje më e mirë është të përdorni mjetin wc
(numërimi i fjalëve) me parametrin -l
(lines), i cili do të numërojë numrin e papërpunuar të linjat i kalohen atij mbi hyrjen standarde. Përdorimi i wc -l
është zgjidhja e preferuar sepse funksionon me -o
për të numëruar numrin e shfaqjeve të vargut ose modelit të dhënë në të gjithë skedarin.
grep -o "foo" file | wc -l
Numërimi nëpër skedarë të shumtë
Një veçori e këndshme e grep
është aftësia për të trajtuar skedarë të shumtë në të njëjtën kohë, ose të kaluar përmes xargs
, parametrave ose të ofruar me zgjerim të shkronjave të ngurta. Kur trajtoni skedarë të shumtë, grep
do të printojë emrin e skedarit përpara ndeshjes. Kur përdorni -c
për të numëruar numrin e rreshtave që përputhen, ai gjithashtu do të printojë emrat e skedarëve:
grep "foo" ./*.txt -cH
Duhet të përdorni gjithmonë flamurin -H
kur punoni me mundësinë e shumë skedarëve, pasi ai gjithmonë do të printojë emrin e skedarit edhe nëse ka vetëm një skedar të kaluar te grep
. Kjo do të parandalojë prishjen e automatizimit nëse varet nga emri i skedarit që është aty.
Nëse dëshironi të përdorni -o
për të numëruar ndeshjet e shumta për rresht dhe të kaloni daljen te wc -l
, fatkeqësisht do të keni mundësinë të shihni numrat për çdo skedar individual si me -c
. Megjithatë, me pak skriptim, mund ta këpusni kolonën e parë me cut
dhe të numëroni numrin e dukurive unike për çdo emër skedari me uniq -c
:
grep "foo" ./*.txt -o | cut -d ':' -f 1 | uniq -c