Je voudrais grep
pour une chaîne, mais aussi montrer les cinq lignes précédentes et les cinq lignes suivantes ainsi que la ligne correspondante. Comment pourrais-je faire cela?
search
logging
grep
command-line-interface
Mark Harrison
la source
la source
man grep | grep -C 1 context
:)man grep | grep -C 1 "\-C"
;)Réponses:
Pour BSD ou GNU,
grep
vous pouvez utiliser-B num
pour définir le nombre de lignes avant la correspondance et-A num
le nombre de lignes après la correspondance.Si vous voulez le même nombre de lignes avant et après, vous pouvez utiliser
-C num
.Cela montrera 3 lignes avant et 3 lignes après.
la source
-A
et-B
fonctionnera, comme le fera-C n
(pour lesn
lignes de contexte), ou tout simplement-n
(pour lesn
lignes de contexte ... tant que n est 1 à 9).la source
-n
format et j'ai découvert qu'il ne fonctionnait que jusqu'à9
. Car15
il renvoie 5 lignes-A
,-B
ou-C
). Habituellement, le spécificateur d'option est suivi d'une valeur (-o a.out
pour spécifier le fichier de sortie dans GCC), mais il peut également fonctionner comme un simple commutateur / indicateur (-g
pour activer les informations de débogage dans GCC). Cependant, les espaces entre les options sont facultatifs, donc pour les options sans valeur, il est possible de les fusionner (-ABC
), ce qui signifie que cela-15
est interprété-1 -5
(deux options distinctes) et le-5
remplace le-1
.ack fonctionne avec des arguments similaires à grep et accepte
-C
. Mais il est généralement préférable de rechercher dans le code.la source
grep
, pas sûr de l'utiliser pour "faire de la publicité"ack
(qui est un excellent outil, en effet) est une bonne idée ...Cela va grep "monfichier" pour "astring", et afficher 5 lignes avant et après chaque match
la source
J'utilise normalement
De nombreux outils comme grep ont également de très bons fichiers man. Je me réfère souvent à la page de manuel de grep car il y a tellement de choses que vous pouvez faire avec.
De nombreux outils GNU ont également une page d'informations qui peut contenir des informations plus utiles en plus de la page de manuel.
la source
Utilisez grep
la source
Recherchez «17655» dans «/some/file.txt» montrant le contexte de 10 lignes avant et après (en utilisant Awk), la sortie précédée du numéro de ligne suivi de deux points. Utilisez-le sur Solaris lorsque 'grep' ne prend pas en charge les options "- [ACB]".
la source
ripgrep
Si vous vous souciez des performances, utilisez
ripgrep
une syntaxe similaire àgrep
, par exempleIl existe également des paramètres tels que
-A
/--after-context
et-B
/--before-context
.L'outil est construit sur le moteur de regex de Rust, ce qui le rend très efficace sur les grandes données.
la source
Voici la solution @Ygor en
awk
Remarque: remplacez
a
etb
variables par le nombre de lignes avant et après.Il est particulièrement utile pour le système qui ne supporte pas de grep
-A
,-B
et les-C
paramètres.la source
-5
vous obtient des5
lignes au-dessus et au-dessous du match 'thestring' est équivalent à-C 5
ou-A 5 -B 5
.la source
Grep a une option appelée
Context Line Control
, vous pouvez utiliser le--context
, simplement,ou
Devrait faire l'affaire
la source
J'utilise pour faire de la manière compacte
C'est l'équivalent de
la source
Si vous recherchez souvent du code, AG le chercheur argent est beaucoup plus efficace (c'est-à-dire plus rapide) que grep.
Vous affichez les lignes de contexte en utilisant l'option -C.
Par exemple:
la source