Perl、Python、AWK和sed之间有什么区别?

2024-05-21 00:54:21 发布

您现在位置:Python中文网/ 问答频道 /正文

只是想知道他们之间的主要区别是什么?以及每种语言的力量(哪种语言更好用)。

编辑:这不是“vs.”之类的主题,只是信息。


Tags: 语言信息编辑主题vs力量区别
3条回答

在掌握了几十种语言之后,你会厌倦像S.Lott这样的人(见他对这个问题的有争议的回答,几乎一半的反对票是在回答六年后的上升(+45/-22)。

Sed是非常简单的命令行管道的最佳工具。在sed主机的手中,它适合于任意复杂度的一次性使用,但是除了在非常简单的替换管道中,它不应该在生产代码中使用。像是/这个/那个/之类的

当只有一个输入源和一个输出(或多个输出按顺序写入)时,Gawk(GNU awk)是复杂数据重新格式化的最佳选择。因为大量的现实工作都符合这种描述,一个好的程序员可以在两个小时内学会呆板,所以这是最好的选择。在这个星球上,越简单、越快越好!

当您有非常复杂的输入/输出场景时,Perl或Python比awk或sed的任何版本都要好得多。从维护和可读性的角度来看,问题越复杂,使用python就越好。但是,请注意,一个好的程序员可以用任何语言编写可读的代码,而一个坏的程序员可以用任何有用的语言编写不可维护的垃圾,因此,如果所说的程序员是熟练和聪明的,那么perl或python的选择可以安全地留给程序员的首选。

按出现顺序,语言是sedawkperlpython

sed程序是一个流编辑器,用于将脚本中的操作应用于输入文件的每一行(或者更一般地说,应用于指定的行范围)。它的语言是基于Unix编辑器ed的,尽管它有条件语句等,但对于复杂的任务很难使用。你可以用它创造一些小奇迹,但要付出代价。但是,当尝试在其权限内执行任务时,它可能是程序中速度最快的。(它拥有所讨论的程序中功能最差的正则表达式——足够用于许多目的,但肯定不是PCRE-Perl兼容的正则表达式)

awk程序(其作者的姓名首字母缩写为Aho、Weinberger和Kernighan)最初是用于格式化报表的工具。它可以用作增强的sed;在其最新版本中,它在计算上是完整的。它使用了一个有趣的想法——程序基于“模式匹配”和“模式匹配时采取的操作”。模式相当强大(扩展正则表达式)。操作的语言与C类似,awk的一个关键特性是它将输入自动拆分为记录,将每个记录拆分为字段。

Perl在某种程度上是作为awk杀手和sed杀手编写的。提供的两个程序是a2ps2p,用于将awk脚本和sed脚本转换为Perl。Perl是下一代脚本语言中最早的一种(Tcl/Tk可能会占据主导地位)。它具有强大的集成正则表达式处理和强大得多的语言。它提供了对几乎所有系统调用的访问,并且具有CPAN模块的扩展性。(无论是awk还是sed都是不可扩展的。)Perl的格言之一是“TMTOWTDI-有多种方法可以做到”(发音为“tim toady”)。Perl有“对象”,但它更多的是一个附加组件,而不是语言的基本部分。

Python是最后编写的,部分原因可能是对Perl的反应。它有一些有趣的语法思想(缩进表示级别-没有大括号或等价物)。它比Perl更基本上是面向对象的;它和Perl一样具有可扩展性。

好的-什么时候使用?

  • Sed-当您需要对文件进行简单的文本转换时。
  • Awk-当你只需要简单的格式化、总结或数据转换时。
  • Perl—几乎适用于任何任务,特别是当任务需要复杂的正则表达式时。
  • Python—用于您可以使用Perl执行的相同任务。

我不知道Perl能做什么Python不能,反之亦然。两者之间的选择将取决于其他因素。我在有Python之前就学会了Perl,所以我倾向于使用它。Python的语法增加较少,一般来说学习起来比较简单。当Perl6可用时,它将是一个迷人的开发。

(请注意,Perl和Python的“概述”尤其不完整;整本书都可能是关于这个主题的。)

我不认为sed是一种成熟的编程语言,它是一种流编辑器,其语言结构旨在以编程方式编辑文本文件。

Awk更像是一种通用语言,但它仍然最适合文本处理。

Perl和Python是成熟的通用编程语言。Perl源于文本处理,有许多类似awk的结构(甚至还有一个awk-to-Perl脚本漂浮在网络上)。Perl和Python之间有很多不同之处,最好的办法可能是在Wikipedia之类的网站上阅读这两种语言的摘要,以便更好地理解它们是什么。

相关问题 更多 >