grep un fichier, mais de montrer autour de plusieurs lignes?
Je voudrais grep
pour une chaîne de caractères, mais aussi de montrer au cours des cinq lignes et cinq lignes ainsi que le contenu de la ligne. Comment serais-je capable de faire cela?
- Je garde une copie de Brendan Gregg du script perl autour de ce but. Fonctionne bien.
- Pour une solution qui fonctionne sur un système Solaris, découvrez ce lien.
man grep | grep -C 1 context
🙂man grep | grep -C 1 "\-C"
😉- Je ne sais pas si, à l'appel de meta (dans un cadre plus général, plutôt que de manière contexte), ou comment l'appeler. Vous avez répondu à la question en montrant comment utiliser la réponse pour trouver la réponse.
- Peut-être quelqu'un ailleurs dans StackExchange peut nous donner une réponse.
Vous devez vous connecter pour publier un commentaire.
Pour BSD ou GNU
grep
vous pouvez utiliser-B num
pour définir le nombre de lignes avant le match et-A num
pour le nombre de lignes après le match.Si vous voulez le même nombre de lignes avant et après que vous pouvez utiliser
-C num
.Cela permettra de montrer les 3 lignes avant et 3 lignes après.
grep -<number of lines here>
fonctionne pour moi.-A
et-B
va travailler, tout comme-C n
(pourn
lignes de contexte), ou tout simplement-n
(pourn
lignes de contexte... tant que n est de 1 à 9).-5
est plus rapide à taper que-A 5 -B 5
-n
format et a constaté qu'elle ne fonctionne que jusqu'à9
. Pour15
il renvoie 5 lignes-A
,-B
ou-C
). Généralement, l'option spécifique est suivie par une valeur (-o a.out
pour spécifier le fichier de sortie dans GCC), mais il peut aussi fonctionner comme un simple commutateur / indicateur (-g
pour activer les informations de débogage dans GCC). Cependant, les espaces entre les options sont optionnelles, pour les options sans valeur, il est possible de les fusionner (-ABC
), ce qui signifie que-15
est interprété-1 -5
(deux options) et le-5
remplace la-1
.ack travaille avec des arguments similaires que grep, et accepte
-C
. Mais il est généralement préférable pour la recherche par code.Qui grep "monfichier" pour "astring", et de montrer les 5 lignes avant et après chaque match
J'utilise normalement
De nombreux outils comme grep ont aussi vraiment grand homme de fichiers trop. Je trouve moi-même en se référant à la page de manuel de grep beaucoup, car il ya tellement de choses que vous pouvez faire avec elle.
De nombreux outils GNU ont également un la page d'info que peuvent avoir les informations les plus utiles en plus de la page de man.
De la recherche pour "17655" dans "/some/file.txt" montrant les 10 lignes de contexte avant et après (à l'aide de Awk), sortie précédé du numéro de la ligne suivie par un deux-points. L'utiliser sur Solaris lorsque 'grep' ne prend pas en charge le "-[ACB]" options.
Utiliser grep
ripgrep
Si vous vous souciez de la performance, l'utilisation
ripgrep
qui a la même syntaxe quegrep
, par exempleIl existe également des paramètres tels que
-A
/--after-context
et-B
/--before-context
.L'outil est construit sur le haut de La rouille du moteur d'expressions régulières ce qui le rend très efficace sur les gros volumes de données.
Ici est la @Ygor solution dans
awk
Remarque: Remplacer
a
etb
variables avec le nombre de lignes avant et après.C'est surtout utile pour le système qui ne prend pas en charge la commande grep est
-A
,-B
et-C
paramètres.-5, vous reçoit 5 lignes au-dessus et au-dessous de la correspondance "thestring" est équivalent à C 5 OU
-5 -B 5
Grep a une option appelée
Context Line Control
, vous pouvez utiliser le--contect
en ce que, tout simplement,ou
Devrait faire l'affaire