sedet awksont des sur-ensembles de grep, il y a des choses qui sont plus faciles à faire avec l'un ou l'autre.
grep foopeut être écrit sed '/foo/!d'ou awk /foo/, mais considérez:
grep -i foodevrait être à sed '/[fF][oO][oO]/!d'moins que vous ne vouliez considérer des extensions non standard comme GNU sed '/foo/I!d'. Ou avec awk: awk 'tolower($0) ~ /foo/'ou encore en utilisant une extension GNU: awk -v IGNORECASE=1 /foo/.
Choses que les différents outils sont bons et encombrants avec les autres outils:
grep
grepest un outil simple mais possède des modes de fonctionnement très spécialisés qui sont plus difficiles à reproduire avec awkou sed:
grep -i pour la correspondance insensible à la casse (voir ci-dessus)
grep -Fe "$string"pour la recherche de chaînes fixes ( export string; awk 'index($0, ENVIRON["string"])'avec awk, pas d'équivalent direct avec sed).
- (non standard)
grep -rpour la recherche récursive
- (non standard)
grep -P/ pcregreppour les sedexpressions rationnelles de type perl (certaines implémentations prennent en charge les expressions rationnelles de type perl mais pas les plus importantes)
- (non standard)
grep -opour renvoyer la partie correspondante (plusieurs lignes awkou sedpour faire de même)
- (non standard)
grep -A/B/Cpour retourner le contexte autour du match (encore une fois douloureux à faire de manière similaire avec sedou awk)
sed
s/foo/bar/: sedDe » sla commande a des caractéristiques qui sont difficiles à mettre en œuvre awkcomme:
s/foo\(.*\)bar/\1/g: capture (bien que GNU awk ait une gensub()extension pour cela)
s/foo/bar/3: remplacer la 3e occurrence sur chaque ligne
- (non standard): édition de fichiers sur place (bien qu'il soit également pris en charge par GNU
awkmaintenant).
awk
awk est la plus riche en fonctionnalités des trois.
- bon pour gérer les chiffres
- bon pour gérer les entrées formatées en colonnes.
- bon pour extraire et combiner des données de différentes sources, avec ses tableaux associatifs.
perl
perlcomme un outil pratique d'extraction et de reporting a le meilleur de tous ceux-là. C'est pour cela qu'il a été initialement conçu (pour être l'outil qui rend tout cela sed/ awkobsolète).
La maîtrise perldu traitement de texte donne un sérieux avantage. Je recommanderais d'y consacrer un peu de temps, avant même de regarder les sedcommandes les moins courantes par exemple.
performance
En règle générale, plus l'outil est spécialisé, plus il est efficace dans la tâche. Mais cela dépend aussi beaucoup de la mise en œuvre, de la tâche et de quelques autres facteurs et performances qui peuvent avoir des compromis à prendre en compte.
Par exemple, il y a quelques grepou sedmises en œuvre qui sont très rapides, mais , par exemple , ils ne prennent pas en charge les caractères multi - octets ne peuvent donc pas fonctionner correctement sur le texte anglais américain dans des endroits multi - octets. Ou ils sont rapides car ils fonctionnent sur un petit tampon de longueur fixe et ne peuvent donc pas fonctionner sur des entrées arbitraires ...