sed
et awk
sont des sur-ensembles de grep
, il y a des choses qui sont plus faciles à faire avec l'un ou l'autre.
grep foo
peut être écrit sed '/foo/!d'
ou awk /foo/
, mais considérez:
grep -i foo
devrait ê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
grep
est un outil simple mais possède des modes de fonctionnement très spécialisés qui sont plus difficiles à reproduire avec awk
ou 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 -r
pour la recherche récursive
- (non standard)
grep -P
/ pcregrep
pour les sed
expressions rationnelles de type perl (certaines implémentations prennent en charge les expressions rationnelles de type perl mais pas les plus importantes)
- (non standard)
grep -o
pour renvoyer la partie correspondante (plusieurs lignes awk
ou sed
pour faire de même)
- (non standard)
grep -A/B/C
pour retourner le contexte autour du match (encore une fois douloureux à faire de manière similaire avec sed
ou awk
)
sed
s/foo/bar/
: sed
De » s
la commande a des caractéristiques qui sont difficiles à mettre en œuvre awk
comme:
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
awk
maintenant).
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
perl
comme 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
/ awk
obsolète).
La maîtrise perl
du traitement de texte donne un sérieux avantage. Je recommanderais d'y consacrer un peu de temps, avant même de regarder les sed
commandes 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 grep
ou sed
mises 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 ...