Pour grep 20 caractères après et avant le match

14

J'ai le problème de recevoir trop d'informations après le match pour

grep -RnisI --color=auto "pseudomonas" *

Je veux seulement 20 caractères ou 10 mots après et avant le match.

Quel est le bon outil pour faire une telle chose?

Léo Léopold Hertz 준영
la source
1
Votre ensemble d'options est un peu étrange lorsque vous vous plaignez de trop d'informations. Vous voulez une ligne après et avant votre match affiché ( -A1et -B1resp.), Mais c'est trop? Où voulez-vous exactement que votre sortie soit recadrée?
Andreas Wiese
1
Pouvez-vous donner un exemple d'entrée et la sortie que vous attendez?
Ramesh
J'ai modifié la commande, je teste dans Ubuntu 13.10, faites-moi savoir si cela fonctionne pour vous. J'ai une option grep et une option egrep
Eric

Réponses:

23
cat file.txt | grep -o -P '.{0,20}string.{0,20}'

Cela devrait le faire pour vous

Mise à jour:

Si vous ne voulez pas cat, vous pouvez simplement utiliser le grep avec le fichier comme paramètre:

grep -o -P '.{0,20}pseudomonas.{0,20}' FileName.html

De plus, le -P utilise Perl Regex, qui, selon les pages de manuel, est expérimental, si vous voulez éviter cet indicateur, vous pouvez simplement utiliser egrep à la place:

grep -Eo '.{0,20}yourstring.{0,20}' yourtestfile.txt
Eric
la source
Quel vilain fichier de test vous avez;)
Ouki
Le reste du fichier est en fait vraiment utile, cela fait partie d'un commentaire sur plusieurs lignes au milieu d'un schéma qui a dû être exclu sans casser notre analyseur, c'était juste une bonne ligne pour l'essayer.
Eric
Étant donné que c'est l'un de mes fichiers, il est défini sur 755, mais je peux voir comment chat n'est peut-être pas idéal pour un fichier HTML, vous pouvez essayer de passer le nom de fichier à grep en tant que paramètre, voir ma modification.
Eric
Je veux dire par 777 fichiers que vous avez 777 copies de différents fichiers, pas la chose chown. Je lance $$$ egrep -o '. {0,20} pseudomonas. {0,20}' * $$$. La commande y reste à l'infini et ne fait rien. Cela semble alors fonctionner à nouveau $$$ egrep -ori '. {0,20} pseudomonas. {0,20}' * $$$. Il en va de même pour la récursivité et la casse. Cependant, c'est très lent. Je pense que ça ne devrait pas être si lent. Grep était considérablement plus rapide.
Léo Léopold Hertz 준영
si le catting ne fonctionne pas, vous pouvez toujours le mettre dans un fichier en ajoutant > results.txtà la fin de votre commande, mais il ne vous dira pas dans quel fichier vous l'avez trouvé.
Eric
4
pcregrep -MnirIso '(?s).{0,20}pseudomonas.{0,20}' . |
  grep --color -e '^' -e pseudomonas

Suppose que les correspondances et leur contexte ne se chevauchent pas et que les noms de fichiers ne contiennent pas pseudomonas.

Notez également que les numéros de ligne rapportés sont ceux du début du contexte.

Stéphane Chazelas
la source