sed和awk有什么区别?
- awk和sed有什么区别?
- 什么样的应用程序是sed和awk工具的最佳用例?
sed
是一个stream编辑器。 它可以在每行的基础上处理字符stream。 它有一个原始的编程语言,包括goto风格的循环和简单的条件(除了模式匹配和地址匹配)。 基本上只有两个“variables”:模式空间和保持空间。 脚本的可读性可能很难。 math运算充其量是非常尴尬的。
有多种版本的sed
,对命令行选项和语言function提供不同级别的支持。
awk
以分行为基础定向到分隔字段。 它有更强大的编程结构,包括if
/ else
, while
, do
/ while
和for
(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 awk
( gawk
)有很多扩展,包括最新版本的真正的multidimensional array。 还有awk
其他变种,包括mawk
和nawk
。
这两个程序都使用正则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/提取文本(文件)