web-dev-qa-db-fra.com

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

Duplicate 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 suis confus quant aux différences entre grep, awk et sed en ce qui concerne leur rôle dans l’administration de système Unix/Linux et le traitement de texte.

117
user288609

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 et sed sont complètement différents de grep. awk et sed sont des processeurs de texte. Non seulement ils ont la possibilité de trouver ce que vous cherchez dans le texte, ils ont également la possibilité de supprimer, d'ajouter et de modifier le texte (et bien plus encore).

awk est principalement utilisé pour l'extraction de données et la création 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

Utilisation de base de awk:
Calcule somme/moyenne/max/min/etc. de quoi que vous ayez 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.

Cela vous aidera à devenir un utilisateur compétent de sed/awk dans n’importe quel environnement de type Unix.

173
aayoubi

Grep est utile si vous souhaitez rechercher rapidement des lignes correspondant à un fichier. Il peut également renvoyer d'autres informations simples telles que les numéros de ligne, le nombre de correspondances et les listes de noms de fichiers correspondants.

Awk est un langage de programmation complet construit autour de la lecture de fichiers de style CSV, du traitement des enregistrements et éventuellement de l'impression d'un jeu de résultats. Il peut faire beaucoup de choses, mais ce n’est pas l’outil le plus simple à utiliser pour des tâches simples.

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

51
Kurt Stutsman

Je veux juste mentionner une chose, il existe de nombreux outils peuvent faire du traitement de texte, par exemple. trier, couper, scinder, joindre, coller, comm, uniq, colonne, rév, tac, tr, nl, pr, tête, queue, etc.

ils sont très pratiques, mais vous devez connaître leurs options, etc.

Une méthode paresseuse (pas la meilleure) pour apprendre le traitement de texte pourrait être: apprenez seulement grep, sed et awk. avec ces trois outils, vous pouvez résoudre près de 99% des problèmes de traitement de texte sans avoir à mémoriser plus de cmds et d’options différentes. :)

ET, si vous avez appris et utilisé les trois, vous connaissiez la différence. En réalité, la différence ici signifie quel outil est le mieux à même de résoudre quel type de problème.

une manière plus paresseuse pourrait être d'apprendre un langage de script (Python, Perl ou Ruby) et de faire tous les traitements de texte avec.

32
Kent