sed和awk有什么区别?

  • awk和sed有什么区别?
  • 什么样的应用程序是sed和awk工具的最佳用例?

sed是一个stream编辑器。 它可以在每行的基础上处理字符stream。 它有一个原始的编程语言,包括goto风格的循环和简单的条件(除了模式匹配和地址匹配)。 基本上只有两个“variables”:模式空间和保持空间。 脚本的可读性可能很难。 math运算充其量是非常尴尬的。

有多种版本的sed ,对命令行选项和语言function提供不同级别的支持。

awk以分行为基础定向到分隔字段。 它有更强大的编程结构,包括if / elsewhiledo / whilefor (C-style和array iteration)。 完全支持variables和单维联合数组加上(IMO)kludgeymultidimensional array。 math运算类似于C中的运算。它具有printf和函数。 “AWK”中的“ K ”代表“C编程语言”名声中的“Kernighan and Ritchie”(不要忘记A ho和W einberger)中的“ K ernighan”。 可以想象用awk写一篇学术抄袭的检测器。

GNU awkgawk )有很多扩展,包括最新版本的真正的multidimensional array。 还有awk其他变种,包括mawknawk

这两个程序都使用正则expression式来select和处理文本。

我会倾向于在文本中有模式的地方使用sed 。 例如,您可以用“会计的括号”forms(例如“(231.45)”)replace一些文本中“负号后跟数字序列”(例如“-231.45”)的所有负数)使用这个(有改进的空间):

 sed 's/-\([0-9.]\+\)/(\1)/g' inputfile 

当文本看起来更像行和列,或者awk指向“logging”和“字段”时,我会使用awk 。 如果我打算做一个类似于上面的操作,但是只能在简单的逗号分隔文件中的第三个字段上,我可能会这样做:

 awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile 

当然,这些仅仅是非常简单的例子,并不能说明每个人所能提供的全部function。

1)awk和sed有什么区别?

两者都是转换文本的工具。 但awk可以做更多的事情,除了只是操纵文本。 它是编程语言本身的一部分,你在编程中学习的东西,比如数组,循环,if / elsestream控等等,你也可以在sed中“编程”,但是你不想维护写在其中的代码。

2)什么样的应用程序是sed和awk工具的最佳使用案例?

结论:使用sed进行非常简单的文本parsing。 除此之外,awk更好。 事实上,你可以完全沟通sed,只是使用awk。 由于它们的函数重叠,awk可以做更多的事情,只需使用awk即可。 你也会减less你的学习曲线。

这两个工具都是用来处理文本的,而且这两个工具都可以用于任务。

对我来说,将它们分开的规则是:使用sed来自动执行在文本编辑器中手动执行的任务。 这就是为什么它被称为stream编辑器 。 (你可以使用相同的命令在vim中编辑文本)。 如果要分析文本,计算字段,计算总数,提取和重组结构等,请使用awk

你也不应该忘记grep 。 使用grep如果你只想search/提取文本(文件)