Je voudrais dire 10 lignes maximum de grep.
Je ne veux pas que mon ordinateur travaille dur. Je veux qu'il s'arrête après 10 résultats trouvés par grep. Est-ce possible ?
Je voudrais dire 10 lignes maximum de grep.
Je ne veux pas que mon ordinateur travaille dur. Je veux qu'il s'arrête après 10 résultats trouvés par grep. Est-ce possible ?
Le site -m
est probablement ce que vous recherchez :
grep -m 10 PATTERN [FILE]
De man grep
:
-m NUM, --max-count=NUM
Stop reading a file after NUM matching lines. If the input is
standard input from a regular file, and NUM matching lines are
output, grep ensures that the standard input is positioned to
just after the last matching line before exiting, regardless of
the presence of trailing context lines. This enables a calling
process to resume a search.
Note : grep arrête de lire le fichier une fois que le nombre spécifié de correspondances a été trouvé !
Bonjour, j'ai essayé, cela fonctionne mais il ne semble pas que le grep "arrête" de penser après avoir trouvé les 10 premières lignes, il semble qu'il continue de penser et "utilise mon processeur" et n'imprime pas, est-ce correct ?
@Jason : cela ne semble pas être le cas : grep prend 0.005s avec -m 1
et 1.579s sans sur un fichier de 10 millions de lignes sur mon ordinateur portable.
Canalisation dans tail
fonctionne en général, mais ne fonctionne pas si vous effectuez une recherche contextuelle, par ex. grep -A10 PATTERN
en utilisant tail
tronque le contexte, plutôt que le nombre de résultats. Cette réponse était ce que je cherchais.
Une autre option est d'utiliser simplement tête :
grep ...parameters... yourfile | head
Cela ne nécessitera pas de rechercher dans tout le fichier - il s'arrêtera lorsque les dix premières lignes correspondantes seront trouvées. Un autre avantage de cette approche est qu'elle ne retournera pas plus de 10 lignes même si vous utilisez grep avec l'option -o.
Par exemple, si le fichier contient les lignes suivantes :
112233
223344
123123
Alors, voici la différence dans la sortie :
$ grep -o '1.' yourfile | head -n2
11
12
$ grep -m2 -o '1.'
11
12
12
Utilisation de head
ne renvoie que 2 résultats comme souhaité, alors que -m2 en renvoie 3.
Notez que vous ne pouvez pas utiliser l'option | head
lors de l'utilisation de grep
avec -A
ou -B
(et donc pas seulement la recherche du résultat ( -o
), mais aussi pour le contexte). Dans ce cas, vous vous retrouvez avec -m
pour indiquer à grep le nombre de lignes de résultats à retourner.
Utilisation de la queue :
#dmesg
...
...
...
[132059.017752] cfg80211: (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm)
[132116.566238] cfg80211: Calling CRDA to update world regulatory domain
[132116.568939] cfg80211: World regulatory domain updated:
[132116.568942] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[132116.568944] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[132116.568945] cfg80211: (2457000 KHz - 2482000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[132116.568947] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
[132116.568948] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[132116.568949] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[132120.288218] cfg80211: Calling CRDA for country: GB
[132120.291143] cfg80211: Regulatory domain changed to country: GB
[132120.291146] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[132120.291148] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291150] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291152] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291153] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm)
[132120.291155] cfg80211: (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm)
alex@ubuntu:~/bugs/navencrypt/dev-tools$ dmesg | grep cfg8021 | head 2
head: cannot open ‘2’ for reading: No such file or directory
alex@ubuntu:~/bugs/navencrypt/dev-tools$ dmesg | grep cfg8021 | tail -2
[132120.291153] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm)
[132120.291155] cfg80211: (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm)
alex@ubuntu:~/bugs/navencrypt/dev-tools$ dmesg | grep cfg8021 | tail -5
[132120.291148] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291150] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291152] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291153] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm)
[132120.291155] cfg80211: (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm)
alex@ubuntu:~/bugs/navencrypt/dev-tools$ dmesg | grep cfg8021 | tail -6
[132120.291146] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[132120.291148] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291150] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291152] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291153] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm)
[132120.291155] cfg80211: (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm)
alex@ubuntu:~/bugs/navencrypt/dev-tools$
Pour 2 cas d'utilisation :
grep -m 2
est une occurrence maximale par fichier.git grep
qui ne prend pas -m
Une bonne alternative dans ces scénarios est grep | sed 2q
pour grep les 2 premières occurrences dans tous les fichiers. documentation sed : https://www.gnu.org/software/sed/manual/sed.html
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Dans votre cas, vous ne voulez pas que l'ordinateur travaille dur Mais si c'est juste un problème de lisibilité pour l'homme, vous pouvez utiliser
less
via un tuyau. Cela remplira l'écran et vous pouvez appuyer sur ENTER pour voir plus de lignes etq
de démissionner :grep "SomeText" somefile.csv | less