什么可以awk做那个sed不能?

时间:2009-08-30 10:23:34

标签: sed awk turing-complete

我使用sed作为批处理ptovess,我用awk无法做到这一点。 vould awk已经做到了吗?或者更多的是选择问题,并调用awk和sed等效的用法。它们都使用与i / o类似的常见搜索替换。是否有一个很好的例子,另一个人不能做什么呢?

5 个答案:

答案 0 :(得分:9)

一个主要区别是awk程序可以维护状态,并且可以使用相同数据的多次传递来操作。 sed调用必然是无状态单遍,因为sed(Stream EDitor)本质上是面向流的。但优点是,这使得sed更简单,更适合在管道中使用。

答案 1 :(得分:7)

原版(仍然是最好的) 书,The AWK Programming Language,以下内容已实施(以及其他许多内容):

  • 一个简单的汇编程序
  • 递归下降编译器
  • 文本索引程序

尝试使用sed。

答案 2 :(得分:3)

我唯一能想到的是,sed可以在awk中减少char数量。因此,对于实时shell的快速​​调整,输入速度会更快。

答案 3 :(得分:2)

SED是一个流编辑器,因此没有变量和其他一些像AWK这样的结构。 AWK是一门完全成熟的语言。

答案 4 :(得分:2)

天儿真好,

Awk更强大。 sed往往在它能做的事情上受到更多的限制。

Sed适用于基于行的数据更改。它有一些简单的循环结构,通常的ed / ex / vi正则表达式和替换东西,复合语句,决策等等。大多数人用它来修改管道数据。

Awk适用于过滤或重新排列数据。它主要用于报告。

我建议看看Dale Dougherty出色的书“sed& awk”(sanitised Amazon link)。顺便说一下,这也是regexp的最佳解释之一。

很多人会说使用Perl! ( - :

编辑:忘了说awk语言非常像C,因为awk中的'k'代表Brian Kernighan,这并不奇怪。是。 Brian Kernighan!

此外,sed仅适用于数据流,而awk适用于数据流和文件。

HTH

欢呼声,Sed只适用于数据流,而awk适用于数据流和文件。