【发布时间】:2010-11-24 03:00:10
【问题描述】:
我将 sed 用于批处理 ptovess,而我无法使用 awk 来完成。 awk 能做到吗?还是更多的是选择问题并调用 awk 和 sed 等效的用法。他们都使用 i/o 进行常见的搜索替换。有没有一个很好的例子,一个不能做而另一个可以做?
【问题讨论】:
标签: sed awk turing-complete
我将 sed 用于批处理 ptovess,而我无法使用 awk 来完成。 awk 能做到吗?还是更多的是选择问题并调用 awk 和 sed 等效的用法。他们都使用 i/o 进行常见的搜索替换。有没有一个很好的例子,一个不能做而另一个可以做?
【问题讨论】:
标签: sed awk turing-complete
一个主要区别是 awk 程序可以保持状态,并且可以对同一数据使用多次传递。 sed 调用必然是无状态的单通道,因为 sed(流编辑器)本质上是面向流的。不过,优点是这使得 sed 更简单,更适合在管道链中使用。
【讨论】:
【讨论】:
生日,
awk 更强大。 sed 的功能往往更加有限。
Sed 适用于基于行的数据更改。它有一些简单的循环结构、常用的 ed/ex/vi 正则表达式和替换、复合语句、决策等。大多数人使用它来修改管道数据。
Awk 非常适合过滤或重新排列数据。它主要用于报告。
我建议看看 Dale Dougherty 的优秀著作“sed & awk”(sanitised Amazon link)。顺便说一句,那里也有对正则表达式的最佳解释之一。
很多人会说无论如何都要使用 Perl! (-:
编辑:忘了说 awk 语言很像 C,鉴于 awk 中的“k”代表 Brian Kernighan,这并不奇怪。是的。 那个布赖恩·克尼汉!
此外,sed 仅适用于数据流,而 awk 则适用于数据流和文件。
HTH
干杯,Sed 仅适用于数据流,而 awk 适用于数据流和文件。
【讨论】:
我能想到的唯一一件事是 sed 可以在 awk 的更少字符数方面做一些小的改变。因此,要在实时 shell 上进行快速调整,输入速度会更快。
【讨论】:
SED 是一个流编辑器,因此没有变量,也没有像 AWK 那样的一些其他结构。 AWK 是一种成熟的语言。
【讨论】: