Quand utiliser grep, less, awk, sed [fermé]

17

J'entre dans le monde de Linux et au travail j'utilise de grepplus en plus. Ce faisant, je me rends compte que parfois ce n'est pas suffisant pour ce que je veux.

Je me battais avec il y grepa quelques jours et un de mes collègues qui est un administrateur Linux senior, m'a dit d'utiliser awk. J'ai été stupéfait de la vitesse à laquelle j'ai obtenu un résultat.

Donc ma question est quand choisissez-vous d'utiliser l'un sur l'autre? Quelles questions puis-je me poser avant d'aller travailler grepet de passer beaucoup de temps, quand j'aurais pu le faire awket gagner du temps?

frankguthrie
la source
C'est une bonne question mais elle est vraiment très large et principalement basée sur l'opinion. Pour répondre à votre question, l'utilisation de grep par opposition à awk dépend vraiment de votre confort d'utilisation de awk / sed. Il y a plusieurs raisons pour lesquelles on pourrait utiliser cela par rapport à ce dernier, comme rechercher quelque chose de plus spécifique que ce que grep a à offrir ou si vous essayez de remplacer / éditer des fichiers avec une chaîne spécifique (en utilisant sed). Mais encore une fois, tout dépend de votre niveau de confort et de votre expérience avec awk / sed.
ryekayo
7
Utilisez lesspour afficher un fichier. Utilisez greppour rechercher dans un fichier. Utilisez sedpour modifier un fichier. Utilisez awkplusieurs fois grepet sedlorsque le fichier que vous souhaitez traiter a une sorte de structure (comme des colonnes). Utilisez- sedle awklorsque vous souhaitez principalement traiter des lignes (telles que supprimer ou ajouter des lignes de texte). Je suis sûr que quelqu'un écrira une réponse de 20 pages plus complète que la mienne.
Satō Katsura
Salut Sato, Il ne s'agit pas de la longueur, mais de ce qui est dit. Et vous quelques lignes sont très informatives. Je vous remercie.
frankguthrie

Réponses:

25

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 ...

Stéphane Chazelas
la source
Excellente réponse! Connaissez-vous l'efficacité des outils? Je suis confus au sujet de la déclaration du PO, qui awkest beaucoup plus rapide que grep.
pfnuesel
@pfnuesel, cela dépend beaucoup de l'implémentation et du modèle d'utilisation. Par exemple, mawkest connu pour être très efficace (mais ne prend pas en charge les caractères multi-octets, ce qui explique en partie qu'il est plus efficace que d'autres outils)
Stéphane Chazelas