Perl,Python,AWK和sed有什么区别? [关闭]

问题描述 投票:244回答:5

只是想知道它们之间的主要区别是什么?以及每种语言的功能(最好使用它)。

Edit:不是“ vs”。就像主题,只是信息。

python perl sed awk language-comparisons
5个回答
535
投票

按照出现的顺序,语言为sedawkperlpython

sed程序是一个流编辑器,旨在将来自脚本的操作应用于输入文件的每一行(或更一般而言,应用于指定的行范围)。它的语言基于Unix编辑器ed,尽管它具有条件等,但很难处理复杂的任务。您可以用它创造一些小奇迹-但要花很多钱。但是,在其权限范围内尝试执行任务时,它可能是最快的程序。 (它具有所讨论程序的功能最弱的正则表达式-足以满足许多目的,但肯定不是PCRE-与Perl兼容的正则表达式)

awk程序(来自其作者名字的缩写-Aho,Weinberger和Kernighan)最初是用于格式化报告的工具。可以用作sed。在最新版本中,它在计算上是完整的。它使用了一个有趣的想法-该程序基于“模式匹配”和“模式匹配时采取的动作”。这些模式非常强大(扩展正则表达式)。操作的语言类似于C。awk的主要功能之一是它将输入自动分为记录,每个记录又分为字段。

Perl是作为awk-killer和sed-killer编写的。附带的两个程序是a2ps2p,用于将awk脚本和sed脚本转换为Perl。 Perl是下一代脚本语言中最早的一种(Tcl / Tk可能声称是首要的)。它具有功能强大的集成正则表达式处理功能,并且语言功能强大得多。它提供对几乎所有系统调用的访问,并具有CPAN模块的可扩展性。 (awksed都不可扩展。)Perl的座右铭之一是“ TMTOWTDI-做到这一点的方法不止一种”(发音为“ tim-toady”)。 Perl具有“对象”,但它不仅仅是语言的基本组成部分,而是附加组件。

Python是最后编写的,可能部分是对Perl的反应。它具有一些有趣的句法概念(缩进以指示级别-没有大括号或等效项)。从根本上说,它比Perl更面向对象。它与Perl一样可扩展。

确定-何时使用它们?

  • Sed-当您需要对文件进行简单的文本转换时。
  • Awk-当您只需要简单的格式化和汇总或数据转换时。
  • Perl-适用于几乎所有任务,但是特别是当任务需要复杂的正则表达式时。
  • Python-执行与Perl相同的任务。

我不知道Perl可以做Python无法做到的任何事情,反之亦然。两者之间的选择将取决于其他因素。我在没有Python之前就学习了Perl,所以我倾向于使用它。 Python的语法较少,而且通常更易于学习。 Perl 6可用时,将是一个令人着迷的发展。

((请注意,Perl和Python的“概述”完全不完整;可以就该主题撰写整本书。)


89
投票

[掌握了几十种语言后,您就厌倦了S. Lott这样的人(请参阅他对这个问题的有争议的答案,六年后,其下票(+ 45 / -22)几乎是其一半)]] >

Sed是用于极其简单的命令行管道的最佳工具。在sed管理员的手中,它适合一次性复杂的应用程序,但除非常简单的替换管道外,不应在生产代码中使用。诸如“ s / this / that /”之类的东西。

Gawk(GNU awk)是只有单个输入源和单个输出(或依次写入多个输出)的复杂数据重新格式化的最佳选择。由于大量实际工作都符合此描述,并且优秀的程序员可以在两个小时内学习gawk,因此这是最佳选择。在这个星球上,更简单,更快越好!

在复杂的输入/输出方案中,Perl或Python比任何版本的awk或sed都要好得多。从维护和可读性的角度来看,问题越复杂,使用python的效果就越好。但是请注意,优秀的程序员可以用任何语言编写可读代码,而糟糕的程序员可以用任何有用的语言编写无法维护的废话,因此,如果说Perl或python是程序员,则可以放心地选择perl或python熟练而聪明。


21
投票

我不会将sed称为成熟的编程语言,它是一种流编辑器,具有旨在以编程方式编辑文本文件的语言构造。


20
投票

首先,“ Perl,Python awk和sed”列表中有两个不相关的内容。


13
投票

[何时使用它们:awk-从不-S. Lott。

© www.soinside.com 2019 - 2024. All rights reserved.