Si je grep un fichier contenant les éléments suivants:
These are words
These are words
These are words
These are words
... pour le mot These
name__, la chaîne These are words
sera imprimée quatre fois.
Comment puis-je empêcher grep d'imprimer plusieurs fois des chaînes récurrentes? Sinon, comment puis-je manipuler la sortie de grep pour supprimer les lignes en double?
La philosophie Unix est d'avoir des outils qui font une chose et les font bien. Dans ce cas, grep
est l'outil qui sélectionne le texte d'un fichier. Pour savoir s’il existe des doublons, on trie le texte. Pour supprimer les doublons, on utilise l'option -u
en sort
name__. Ainsi:
grep These filename | sort -u
sort
a de nombreuses options: voir man sort
. Si vous voulez compter les doublons ou avoir un schéma plus compliqué pour déterminer ce qui est ou non un doublon, dirigez la sortie de tri sur uniq
name__: grep These filename | sort | uniq
et voyez man
name__uniq` pour les options.
Utiliser grep
et un commutateur supplémentaire, si vous ne recherchez qu'une seule chaîne
grep -m1 'These' filename
De man grep
-m NUM, --max-count=NUM
Stop reading a file after NUM matching lines. If the input is
standard input from a regular file, and NUM matching lines are
output, grep ensures that the standard input is positioned to
just after the last matching line before exiting, regardless
of the presence of trailing context lines. This enables a calling
process to resume a search. When grep stops after NUM matching
lines, it outputs any trailing context lines. When the -c or
--count option is also used, grep does not output a count greater
than NUM. When the -v or --invert-match option is also used, grep
stops after outputting NUM non-matching lines.
ou en utilisant awk
;)
awk '/These/ {print; exit}' foo