291 votes

Quelles sont les différences entre le sed, AWK et Python, Perl ?

Je veux juste savoir quelles sont les principales différences entre eux ? et la puissance de chaque langue (où il est préférable de l’utiliser).

Edit : ce n’est pas « contre » comme sujet, quelques informations.

609voto

Jonathan Leffler Points 299946

Dans l'ordre d'apparition, les langues sont sed, awk, perl, python.

L' sed programme est un éditeur de flux, et est conçu pour appliquer les actions à partir d'un script pour chaque ligne (ou, plus généralement, à de certaines limites de lignes) du fichier d'entrée ou de fichiers. Son langage est basé sur ed, l'éditeur Unix, et même si elle a des instructions conditionnelles et ainsi de suite, il est plus difficile d'effectuer des tâches complexes. Vous pouvez travailler des petits miracles avec elle - mais à un coût pour les cheveux sur votre tête. Cependant, il est probablement le plus rapide des programmes lors de la tentative de tâches relevant de ses attributions. (C'est le moins puissant des expressions régulières des programmes dont il est question adéquate pour de nombreuses raisons, mais certainement pas PCRE - Perl-Compatible Regular Expressions)

L' awk program (nom des initiales de ses auteurs - Aho, Weinberger et Kernighan) est un outil à l'origine pour la mise en forme de rapports. Il peut être utilisé comme un gonflé sed; dans ses versions plus récentes, il est mathématiquement complète. Il utilise une idée intéressante - le programme est basé sur des modèles appariés " et " les mesures prises lors de la répétition des matchs. Les modèles sont assez puissants (les Expressions Régulières Étendues). La langue de l'action est similaire à C. l'Une des principales caractéristiques de l' awk est qu'il divise les lignes d'entrée dans les champs automatiquement.

Perl a été écrit en partie comme un awk-killer et sed-killer. Deux des programmes fournis avec sont a2p et s2p pour la conversion de awk scripts et sed des scripts en Perl. Perl est un des plus anciens de la prochaine génération de langages de script (Tcl/Tk peut sans doute prétendre à la primauté). Il a intégré puissant expression régulière de la manipulation avec un beaucoup plus puissant de la langue. Il donne accès à presque tous les appels système, et a l'extensibilité des modules CPAN. (Ni awk ni sed est extensible.) L'un de Perl est le refrain est "TMTOWTDI - Il n'y a plus d'une façon de le faire" (prononcé "tim-toady"). Perl a "objets", mais c'est plus un add-on qu'une partie fondamentale de la langue.

Python a été écrit en dernier, et probablement en partie une réaction à Perl. Il est intéressant syntaxique des idées (l'indentation pour indiquer les niveaux - pas de broches ou équivalents). Il est plus fondamentalement orientée objet de Perl; il est tout aussi extensible que Perl.

OK - lors de l'utilisation de chacun?

  • sed - lorsque vous avez besoin de faire un simple texte transformations sur les fichiers.
  • awk - quand vous avez seulement besoin d'une simple mise en forme et d'une synthèse ou d'une transformation de données.
  • perl - pour presque n'importe quelle tâche, mais surtout lorsque la tâche besoins complexes des expressions régulières.
  • python - pour les mêmes tâches que vous pourriez utiliser Perl pour.

Je ne suis pas au courant de tout ce que Perl peut faire que Python ne peut pas, ni vice-versa. Le choix entre les deux dépend d'autres facteurs. J'ai appris Perl avant il y avait un Python, donc j'ai tendance à l'utiliser. Python a moins appréciation de la syntaxe et sont généralement un peu plus simples à apprendre. Perl 6, lorsqu'il est disponible, sera un développement fascinant.

(Notez que "aperçus" de Perl et Python, en particulier, sont malheureusement incomplète; des livres entiers pourraient être écrits sur le sujet.)

106voto

Charlie Points 479

Après avoir maîtrisé quelques dizaines de langues, vous en avez assez de gens comme S. Lott.

Sed est le meilleur outil extrêmement simple ligne de commande des pipelines. Dans les mains d'un sed maître, il est adapté pour des opérations ponctuelles de l'arbitraire de la complexité, mais il ne devrait pas être utilisée dans le code de production, sauf dans de très simple substitution des pipelines. Des trucs comme s '/cette/que/.'

Gawk (GNU awk) est de loin le meilleur choix pour des données complexes reformatage lorsqu'il n'existe qu'une seule source d'entrée et une seule sortie (ou plusieurs sorties utilisées séquentiellement). Depuis une grande partie du monde réel du travail est conforme à cette description, et un bon programmeur peut apprendre à s'émerveiller en deux heures, c'est le meilleur choix. Sur cette planète, plus simple et plus rapide, mieux c'est!

Perl ou Python sont beaucoup mieux que n'importe quelle version de awk ou sed lorsque vous avez très complexe d'entrée/sortie des scénarios. Le plus complexe est le problème, le mieux vous vous trouvez à l'aide de python, de l'entretien et la lisibilité de son point de vue. Notez, cependant, qu'un bon programmeur peut écrire un code lisible dans n'importe quelle langue, et un mauvais programmeur peut écrire désuète de la merde en toute langue, de sorte que le choix de perl ou python peut en toute sécurité être laissé à la discrétion du programmeur, si le programmeur est habile et intelligent.

23voto

Robert Gamble Points 41984

Je ne dirais pas sed d'un véritable langage de programmation, c'est un éditeur de flux avec les constructions de langage visant à éditer les fichiers de texte par programmation.

Awk est un peu plus d'un usage général de la langue, mais c'est encore le mieux adapté pour un traitement de texte.

Perl et Python sont à part entière, les langages de programmation. Perl a ses racines dans le traitement de texte et a un certain nombre de awk-comme des constructions (il y a même un awk-à-script perl qui circulent sur le net). Il existe de nombreuses différences entre Perl et Python, votre meilleur pari est probablement pour lire les résumés des deux langues sur quelque chose comme Wikipédia pour obtenir une bonne prise sur ce qu'ils sont.

20voto

S.Lott Points 207588

Tout d'abord, il y a deux choses sans rapport entre elles dans la liste "Perl, Python awk et sed".

Chose 1 - simpliste de texte outils de manipulation.

  • le sed. Il a un fixe, relativement simple à portée de travail défini par l'idée de la lecture et de l'examen de chaque ligne d'un fichier. sed n'est pas conçu pour être particulièrement lisible. Il est conçu pour être très petit et très efficace sur de très petite serveurs unix.

  • awk. Il est un peu moins fixe, moins simple portée des travaux. Cependant, la boucle principale d'un programme awk est définie par la lecture implicite de lignes d'un fichier source.

Ce ne sont pas "complète" des langages de programmation. Alors que vous pouvez-avec quelques travaux -- écrire assez sophistiqué programmes awk, rapidement, il devient compliqué et difficile à lire.

Chose 2 - en général, les langages de programmation. Ceux-ci ont une grande variété de types de déclarations, de nombreux intégré dans les structures de données, et non câblé dans les hypothèses ou des raccourcis pour parler de.

  • Perl.

  • Python.

Quand les utiliser.

  • le sed. Jamais. Il n'a vraiment pas de n'importe quelle valeur dans l'ère moderne des ordinateurs avec plus de 32 ko de mémoire. Perl ou Python faire les mêmes choses plus clairement.

  • awk. Jamais. Comme sed, il reflète une époque antérieure de l'informatique. Plutôt que de maintenir cette langue (en plus de tous les autres pour réussir un tel système), il est plus agréable de simplement tout faire dans une langue agréable.

  • Perl. Tout problème de programmation de toute nature. Si vous aimez la libre-pensée de la syntaxe, où il y a beaucoup, beaucoup de manières de faire la même chose, perl est un plaisir.

  • Python. Tout problème de programmation de toute nature. Si vous aimez assez limité de la syntaxe, où il y a moins de choix, moins de subtilité, et (peut-être) plus de clarté. Python orienté objet le rend plus adapté pour les grands, des problèmes complexes.

Arrière-plan -- je ne suis pas dénigrer sed et awk de l'ignorance. J'ai appris awk plus de 20 ans. A fait beaucoup de choses avec elle; utilisé pour l'enseigner comme un noyau unix de compétences. J'ai appris Perl environ 15 ans. Ne sophistiquées de choses avec elle. J'ai laissé les deux derrière parce que je peux faire la même chose en Python, et c'est plus simple et plus claire.

Il y a deux problèmes graves avec sed et awk, ce qui n'est pas de leur âge.

  1. L'incomplétude de leur mise en œuvre. Tout sed et awk ne peut être fait en Python ou Perl, souvent plus simplement et parfois plus rapide, trop. Un oléoduc de shell a certains avantages en termes de performances en raison de son multi-processing. Python propose un subprocess module pour me permettre de récupérer ces avantages.

  2. La nécessité de l'apprentissage d'une autre langue. En faisant les choses en Python (ou Perl) de votre mise en œuvre dépend de moins en moins de langues, avec une augmentation de la clarté.

18voto

tao quam Points 67

Quand les utiliser: awk - jamais - brian d foy.

Je pense que brian légèrement à côté de la plaque avec cette recommandation. Le fait est, sur Linux et les autres UNIX, awk est un outil utile pour être utilisé avec bash, sh et ksh pour les traitements de texte rapide. L'idée du script lui-même est à vous de résoudre votre problème en collant ensemble à cet outil, cet outil. Donc dans l'admin de scripts, il est commun à a ls, grep, |, awk, le temps, le ps, etc. Chacun est un outil que le scripteur combine comme un générateur de brique par brique pour terminer la construction (pour résoudre le problème à portée de main).

Par exemple, je suis un membre de l'équipe de l'équipe de gestion de paintball gear fournitures en ligne. Ce site de e-commerce est basé sur la pile LAMP. Pour un traitement automatisé et la normalisation des flux de données à partir de différents fournisseurs dans la base de données, nous embaucher et de maintenir un ensemble diversifié de scripts bash, perl, php, et même s'attendre. Chacun a ses points forts, basés sur les modules disponibles et de l'API. Dans les scripts bash nous n'rapide des modèles de correspondance et les actions appropriées sur les modèles que nécessaire en utilisant awk sans la nécessité de passer à PERL. Une chose que je tiens également à souligner, qui n'a pas été souligné dans le thread, c'est que bon nombre de ces scripts ont été achetés, ou obtenu à partir de l'open source. Si le script est venu comme Perl, nous maintenir en tant que Perl; si le script est venu comme Php, nous maintenir en tant que Php; si c'est venu comme bash, nous maintenir en tant que bash; nous n'avons pas ré-écrire dans une autre langue, tout simplement parce que nous pensons qu'il est moins efficace dans la langue d'origine.

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