203 votes

Grep personnages avant et après match ?

En utilisant ceci :

 grep -A1 -B1 "test_pattern" file

produira une ligne avant et après le motif correspondant dans le fichier. Existe-t-il un moyen d'afficher non pas des lignes mais un nombre spécifié de caractères ?

Les lignes de mon fichier sont assez grandes, donc je ne suis pas intéressé par l'impression de la ligne entière mais plutôt par l'observation de la correspondance dans son contexte. Des suggestions sur la façon de faire cela?

263voto

3 caractères avant et 4 caractères après

 $> echo "some123_string_and_another" | grep -o -P '.{0,3}string.{0,4}'
23_string_and

157voto

ekse Points 347
grep -E -o ".{0,5}test_pattern.{0,5}" test.txt 

Cela correspondra jusqu'à 5 caractères avant et après votre modèle. Le commutateur -o indique à grep de n'afficher que la correspondance et -E d'utiliser une expression régulière étendue. Assurez-vous de mettre les guillemets autour de votre expression, sinon elle pourrait être interprétée par le shell.

49voto

amit_g Points 15415

Vous pourriez utiliser

 awk '/test_pattern/ {
    match($0, /test_pattern/); print substr($0, RSTART - 10, RLENGTH + 20);
}' file

33voto

ruakh Points 68789

Tu veux dire comme cela:

 grep -o '.\{0,20\}test_pattern.\{0,20\}' file

?

Cela imprimera jusqu'à vingt caractères de chaque côté de test_pattern . La \{0,20\} est comme * , mais spécifie de zéro à vingt répétitions au lieu de zéro ou plus. La -o indique de n'afficher que la correspondance elle-même, plutôt que le ligne entière.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X