Salut, je suis très nouveau dans la programmation bash. Je veux un moyen de rechercher dans un texte donné. Pour cela, j'utilise la grep
fonction:
grep -i "my_regex"
Ça marche. Mais étant donné data
ceci:
This is the test data
This is the error data as follows
. . .
. . . .
. . . . . .
. . . . . . . . .
Error data ends
Une fois que j'ai trouvé le mot error
(en utilisant grep -i error data
), je souhaite trouver les 10 lignes qui suivent le mot error
. Donc, ma sortie devrait être:
. . .
. . . .
. . . . . .
. . . . . . . . .
Error data ends
Y a-t-il des moyens de le faire?
error
.Réponses:
Vous pouvez utiliser
-B
et-A
pour imprimer des lignes avant et après le match.Imprime les 10 lignes avant le match, y compris la ligne correspondante elle-même.
la source
test=$(grep -i -B 10 'error' data)
, et de l'imprimer en utilisantecho $test
, j'obtiens les longues lignes droites en sortie.echo "$test"
plutôt queecho $test
-C 10
imprimera 10 lignes avant ET après d'un seul coup!Cela imprime 10 lignes de contexte de fin après les lignes correspondantes
Si vous devez imprimer 10 lignes de contexte principal avant de faire correspondre les lignes,
Et si vous avez besoin d'imprimer 10 lignes de contexte de sortie de début et de fin.
Exemple
Grep normal
Grep lignes correspondantes exactes et 2 lignes après
Grep lignes correspondantes exactes et 2 lignes avant
Grep lignes correspondantes exactes et 2 lignes avant et après
Référence: manpage grep
la source
La façon de procéder se trouve en haut de la page de manuel
la source
Essaye ça:
-A 10 signifie, imprimer dix lignes après la correspondance avec "my_regex"
la source