Salut, je suis très nouveau à la programmation bash. Je veux un moyen de chercher dans un texte donné. Pour cela j'utilise la fonction grep
:
grep -i "my_regex"
Ça marche. Mais étant donné la data
comme 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?
Vous pouvez utiliser -B
et -A
pour imprimer des lignes avant et après la correspondance.
grep -i -B 10 'error' data
Imprimera les 10 lignes avant le match, y compris la ligne correspondante.
Ceci affiche 10 lignes de contexte de fin après les lignes correspondantes
grep -i "my_regex" -A 10
Si vous devez imprimer 10 lignes de contexte avant les lignes correspondantes,
grep -i "my_regex" -B 10
Et si vous devez imprimer 10 lignes de contexte de sortie de début et de fin.
grep -i "my_regex" -C 10
Exemple
user@box:~$ cat out
line 1
line 2
line 3
line 4
line 5 my_regex
line 6
line 7
line 8
line 9
user@box:~$
grep normal
user@box:~$ grep my_regex out
line 5 my_regex
user@box:~$
lignes exactes de correspondance Grep et 2 lignes après
user@box:~$ grep -A 2 my_regex out
line 5 my_regex
line 6
line 7
user@box:~$
lignes exactes Grep et 2 lignes avant
user@box:~$ grep -B 2 my_regex out
line 3
line 4
line 5 my_regex
user@box:~$
lignes exactes Grep et 2 lignes avant et après
user@box:~$ grep -C 2 my_regex out
line 3
line 4
line 5 my_regex
line 6
line 7
user@box:~$
Référence: manpage grep
-A num
--after-context=num
Print num lines of trailing context after matching lines.
-B num
--before-context=num
Print num lines of leading context before matching lines.
-C num
-num
--context=num
Print num lines of leading and trailing output context.
Pour ce faire, vous vous trouvez en haut de la page de manuel.
grep -i -A 10 'error data'
Essaye ça:
grep -i -A 10 "my_regex"
-A 10 signifie, affiche dix lignes après la correspondance avec "my_regex"