首页 文章

sed和awk有什么区别? [关闭]

提问于
浏览
441
  • awk和sed有什么区别?

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

3 回答

  • 111

    sed 是一个流编辑器 . 它适用于每行的字符流 . 它有一个原始的编程语言,包括goto风格的循环和简单的条件(除了模式匹配和地址匹配) . 基本上只有两个"variables":模式空间和保持空间 . 脚本的可读性可能很难 . 数学运算充其量只是非常尴尬 .

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

    awk 面向每行的分隔字段 . 它有更强大的编程结构,包括 if / elsewhiledo / whilefor (C风格和数组迭代) . 完全支持变量和单维关联数组加上(IMO)kludgey多维数组 . 数学运算类似于C语言 . 它具有 printf 和函数 . "K"在"AWK"中代表“ K ernighan " as in " Kernighan和Ritchie " of the book " C编程语言”成名(不要忘记 A ho和 W einberger) . 可以想象使用 awk 编写一个学术抄袭的探测器 .

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

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

    我倾向于使用 sed 文本中有模式 . 例如,您可以使用"minus-sign followed by a sequence of digits"格式(例如"-231.45")替换"minus-sign followed by a sequence of digits"形式的某些文本中的所有负数(例如"-231.45")(这有改进的余地):

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

    当文本看起来更像行和列时,我会使用 awk ,或者 awk 指的是"records"和"fields" . 如果我要执行与上面类似的操作,但只在一个简单的逗号分隔文件中的第三个字段上,我可能会执行以下操作:

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

    当然,这些只是非常简单的例子,并没有说明每个人提供的全部功能 .

  • 38

    1)awk和sed有什么区别?

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

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

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

  • 499

    这两个工具都适用于文本,并且有两个工具都可以使用 .

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

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

相关问题