Dans votre cas, vous ne voulez pas que l'ordinateur travaille dur. Mais s'il s'agit simplement d'un problème de lisibilité humaine, vous pouvez l'utiliser lessvia un tuyau. Cela remplira l'écran et vous pouvez qgrep "SomeText" somefile.csv | less
appuyer
Réponses:
240
L' -moption 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.
Remarque: grep arrête de lire le fichier une fois que le nombre spécifié de correspondances a été trouvé!
salut il a essayé cela fonctionne fondamentalement 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 à penser et "en utilisant mon processeur" et tout simplement pas printint c'est correct? thansk
Jas
6
@Jason: cela ne semble pas être le cas: grep prend 0,005s avec -m 1et 1,579s sans sur un fichier de 10 millions de lignes sur mon ordinateur portable.
Grégoire
3
La connexion fonctionne tailgénéralement, mais se décompose en particulier si vous utilisez du contexte, par exemple grep -A10 PATTERN, l'utilisation de tailtronque le contexte, plutôt que le nombre de résultats. Cette réponse était ce que je cherchais.
dimo414
1
-m 10est l'option qui fait la différence lors de la greffe de plusieurs fichiers! La tuyauterie vers la tête n'affiche pas les correspondances dans les fichiers suivants s'il y a trop de correspondances dans le premier fichier. Merci !
Julien
1
IMHO cela devrait être marqué comme la réponse acceptée, car il ne nécessite pas un autre outil. BTW, il est plus facile de se souvenir de cette option en sachant qu'il s'agit du raccourci de --max-count
ishahak
68
Une autre option consiste simplement à utiliser head :
grep ...parameters... yourfile | head
Cela ne nécessitera pas de rechercher le fichier entier - 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:
Notez que vous ne pouvez pas utiliser le | headtube lors de l'utilisation grepavec -Aou -B(et donc non seulement pour la recherche de result ( -o), mais aussi pour le contexte). Dans ce cas, il vous reste -mà dire à grep le nombre de lignes avec les résultats à renvoyer.
Attila O.30
17
L'utilisation de head n'empêche pas réellement grep de parcourir tout le fichier. L'utilisation de l'option -m dans grep le fait.
LopSae
7
Approche Awk:
awk '/pattern/{print; count++; if (count==10) exit}' file
less
via un tuyau. Cela remplira l'écran et vous pouvezq
grep "SomeText" somefile.csv | less
Réponses:
L'
-m
option est probablement ce que vous recherchez:De
man grep
:Remarque: grep arrête de lire le fichier une fois que le nombre spécifié de correspondances a été trouvé!
la source
-m 1
et 1,579s sans sur un fichier de 10 millions de lignes sur mon ordinateur portable.tail
généralement, mais se décompose en particulier si vous utilisez du contexte, par exemplegrep -A10 PATTERN
, l'utilisation detail
tronque le contexte, plutôt que le nombre de résultats. Cette réponse était ce que je cherchais.-m 10
est l'option qui fait la différence lors de la greffe de plusieurs fichiers! La tuyauterie vers la tête n'affiche pas les correspondances dans les fichiers suivants s'il y a trop de correspondances dans le premier fichier. Merci !Une autre option consiste simplement à utiliser head :
Cela ne nécessitera pas de rechercher le fichier entier - 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:
Alors voici la différence de sortie:
L'utilisation
head
ne renvoie que 2 résultats comme souhaité, tandis que -m2 renvoie 3.la source
| head
tube lors de l'utilisationgrep
avec-A
ou-B
(et donc non seulement pour la recherche de result (-o
), mais aussi pour le contexte). Dans ce cas, il vous reste-m
à dire à grep le nombre de lignes avec les résultats à renvoyer.Approche Awk:
la source
Utilisation de la queue:
la source
Pour 2 cas d'utilisation:
grep -m 2
occurrence maximale est par fichier.git grep
ce qui ne prend pas-m
Une bonne alternative dans ces scénarios est
grep | sed 2q
de grep les 2 premières occurrences sur tous les fichiers. documentation sed: https://www.gnu.org/software/sed/manual/sed.htmlla source