sed和awk有什么区别?

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

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

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

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

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

    这两个程序都使用正则表达式来选择和处理文本。

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

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

    当文本看起来更像行和列时,我会使用awk ,因为awk将它们称为“记录”和“字段”。 如果我要做与上面类似的操作,但只能在简单的逗号分隔文件中的第三个字段上,我可能会这样做:

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

    当然,这些只是非常简单的例子,并不能说明每种产品的全部功能。


    1)awk和sed有什么区别?

    两者都是转换文本的工具。 但除了操作文本之外,awk还可以做更多的事情。 它本身就是一种编程语言,其中包含大部分编程中学到的东西,比如数组,循环,if / else流控等等。您也可以在sed中“编程”,但是您不希望维护写在其中的代码。

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

    结论:使用sed进行非常简单的文本解析。 除此之外,awk更好。 事实上,你可以完全抛弃sed并使用awk。 由于它们的函数重叠,并且awk可以做更多,所以只需使用awk。 你也会减少你的学习曲线。


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

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

    你也不应该忘记grep 。 如果您只想在文本(文件)中搜索/提取某些内容,请使用grep

    链接地址: http://www.djcxy.com/p/47129.html

    上一篇: What is the difference between sed and awk?

    下一篇: How to do a recursive find/replace of a string with awk or sed?