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

≡放荡痞女 提交于 2020-01-20 16:25:23
  • awksed有什么区别?
  • 什么样的应用程序是sed和awk工具的最佳用例?

#1楼

1)awk和sed有什么区别?

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

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

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


#2楼

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

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

awk以每行为基础定向分隔字段。 它有更强大的编程结构,包括if / elsewhiledo / whilefor (C风格和数组迭代)。 完全支持变量和单维关联数组加上(IMO)kludgey多维数组。 数学运算类似于C printf 。它具有printf和函数。 “AWK”中的“ K ”代表“ K ernighan”,如“C Programming Language”一书中的“Kernighan and Ritchie”(不要忘记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

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


#3楼

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

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!