Bonjour,
J'utilise souvent la commande grep pour rechercher des éléments dans un fichier.
Je l'utilise le plus souvent : grep "motif" -A 10 -B 10 afin d'afficher tous les motifs ainsi que les 10 lignes qui le précède et qui le suivent.
J'aimerais utiliser le même concept mais sur un mot, je m'explique :
J'aimerais grep et n'afficher que le mot grep dans un premier temps.
Ensuite j'aimerais afficher les 10 mots qui précèdent et qui suivent toutes mes occurences de grep. Mais je n'y suis pas parvenu. Est ce que quelqu'un pourrait me donner une piste pour ma commande ?
Cordialement
# Piste
Posté par Matthieu Moy (site web personnel) . Évalué à 4.
Déjà,
-A 10 -B 10
, c'est une manière verbeuse d'écrire-C 10
;-).Ce que tu cherches n'existe pas à ma connaissance avec
grep
, mais tu peux toujours transformer le texte en entrée pour transformer les mots en ligne. Quelque chose comme :
En remplaçanttr ' ' '\n' <$fichier | grep -C 10 $mot --color=force | tr '\n' ' '
$mot
et$fichier
.# Sur la même ligne
Posté par kna . Évalué à 5.
Si tous les mots sont sur la même ligne, tu peux les matcher avec une regex :
(10 suites de caractères non espace, suivies d'un espace, puis $mot, puis 10 espaces suivies d'une suite de caractère non espace)
# IFS
Posté par guitou . Évalué à 1.
Bonjour.
Au risque de dire une grosse couennerie, je crois que tu peux resoudre ton probleme en utilisant la variable d'environnement IFS (Input Field Separator, "\n" par defaut). Ce qui donnerait qqch de cet ordre:
Probable que ca ne marche pas "out of the box" (p-e plutot IFS="\s" voire "\s+" si c'est supporte), mais a tester.
++
Gi)
[^] # Re: IFS
Posté par Cyril Brulebois (site web personnel) . Évalué à 3.
IFS
, c'est un peu plus que\n
uniquement. ;)→ Espace, tabulation, et retour à la ligne.
Cela explique en partie pourquoi les scripts qui changent
IFS
pour une section de code plutôt que pour juste une commande comme tu le proposais… incluent presque tous une sauvegarde préalable dans une variable souvent nomméeOLDIFS
, pour recopie ultérieure dansIFS
.Debian Consultant @ DEBAMAX
[^] # Re: IFS
Posté par Matthieu Moy (site web personnel) . Évalué à 4. Dernière modification le 27 juillet 2018 à 08:26.
Oui ;-).
Plus sérieusement :
$IFS
est utilisé par le shell pour délimiter les mots (en particulier dans la constructionfor v in $values
), mais pas pargrep
.Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.