147 votes

Quelles sont les différences entre grep, awk et sed ?

Duplicata possible :
Quelles sont les différences entre Perl, Python, AWK et sed ?
Quelle est la différence entre sed et awk ?

Ce n'est peut-être pas une question très précise, mais je ne comprends pas bien la différence entre grep , awk y sed en ce qui concerne leur rôle dans l'administration des systèmes Unix/Linux et le traitement des textes.

205voto

Ayoubi Points 2390

Définition courte :

grep : recherche de termes spécifiques dans un fichier

#usage
$ grep This file.txt
Every line containing "This"
Every line containing "This"
Every line containing "This"
Every line containing "This"

$ cat file.txt
Every line containing "This"
Every line containing "This"
Every line containing "That"
Every line containing "This"
Every line containing "This"

Maintenant awk y sed sont complètement différents de grep . awk y sed sont des processeurs de texte. Non seulement ils ont la capacité de trouver ce que vous cherchez dans le texte, mais ils ont également la capacité de supprimer, d'ajouter et de modifier le texte (et bien plus encore).

awk est principalement utilisé pour l'extraction de données et l'établissement de rapports. sed est un éditeur de flux
Chacun d'entre eux a ses propres fonctionnalités et spécialités.

Exemple
Sed

$ sed -i 's/cat/dog/' file.txt
# this will replace any occurrence of the characters 'cat' by 'dog'

Awk

$ awk '{print $2}' file.txt
# this will print the second column of file.txt

Base awk l'usage :
Calculez la somme/moyenne/maximale/etc. ce dont vous avez besoin.

$ cat file.txt
A 10
B 20
C 60
$ awk 'BEGIN {sum=0; count=0; OFS="\t"} {sum+=$2; count++} END {print "Average:", sum/count}' file.txt
Average:    30

Je vous recommande de lire ce livre : Sed & Awk : 2nd Ed.

Il vous aidera à devenir un utilisateur compétent de sed/awk sur n'importe quel environnement de type unix.

65voto

Kurt Stutsman Points 1402

Grep est utile si vous voulez rechercher rapidement les lignes qui correspondent dans un fichier. Il peut également renvoyer d'autres informations simples comme les numéros de lignes correspondantes, le nombre de correspondances et les listes de noms de fichiers.

Awk est un langage de programmation entièrement construit autour de la lecture de fichiers de type CSV, du traitement des enregistrements et, éventuellement, de l'impression d'un ensemble de données de résultat. Il peut faire beaucoup de choses, mais ce n'est pas l'outil le plus facile à utiliser pour les tâches simples.

Sed est utile lorsque vous souhaitez apporter des modifications à un fichier en fonction d'expressions régulières. Il vous permet de faire correspondre facilement des parties de lignes, d'effectuer des modifications et d'imprimer les résultats. Il est moins expressif qu'awk mais cela le rend plus facile à utiliser pour des tâches simples. Il a beaucoup d'opérateurs plus compliqués que vous pouvez utiliser (je pense qu'il est même complet de Turing), mais en général vous n'utiliserez pas ces fonctionnalités.

1 votes

On peut rechercher une ligne dans un fichier avec AWK aussi rapidement qu'avec Grep. C'est le premier cas décrit ici : grep vs awk : 10 exemples de recherche de motifs (theunixschool) .

35voto

Kent Points 71470

Je veux juste mentionner une chose, il y a beaucoup d'outils qui peuvent faire du traitement de texte, par ex. trier, couper, diviser, joindre, coller, comm, uniq, column, rev, tac, tr, nl, pr, head, tail.....

ils sont très pratiques, mais il faut apprendre leurs options, etc.

Une façon paresseuse (pas la meilleure) d'apprendre le traitement de texte pourrait être : apprenez seulement grep , sed et awk. avec ces trois outils, vous pouvez résoudre presque 99% des problèmes de traitement de texte et n'avez pas besoin de mémoriser les différentes cmds et options. :)

Et, si vous avez appris et utilisé les trois, vous connaissez la différence. En fait, la différence signifie ici quel outil est bon pour résoudre quel type de problème.

une manière plus paresseuse pourrait être d'apprendre un langage script (python, perl ou ruby) et de faire tout traitement de texte avec.

4 votes

Cela dépend de la complexité du travail à effectuer en dehors de la correspondance des modèles. S'il y a beaucoup de logique en dehors de la magie des motifs, Python sera une meilleure option, si la logique environnante est plus simple, SEd/Grep/AWK.

2 votes

En fait, en suivant ce raisonnement, vous pourriez recommander d'apprendre et d'utiliser awk, car il peut faire la plupart des choses que sed et grep peuvent faire.

0 votes

Cela ne devrait pas être une réponse car cela ne répond pas à la question du PO.

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