- awk和sed有什么区别?
- sed和awk工具最适合哪些应用场景?
sed
是一种流编辑器,它以每行为基础处理字符流。它具有原始的编程语言,包括goto式循环和简单条件(除了模式匹配和地址匹配)。基本上只有两个“变量”:模式空间和保留空间。脚本的可读性可能会很难。在最佳情况下,数学运算非常笨拙。
有各种版本的sed
,支持不同程度的命令行选项和语言特性。
awk
以每行为基础,面向分隔字段。它具有更强大的编程结构,包括if
/else
、while
、do
/while
和for
(C风格和数组迭代)。它完全支持变量和单维关联数组加上(据我认为)不太优雅的多维数组。数学运算类似于C。它还有printf
和函数。在“Aho和Weinberger”的人名中,“AWK”的“K”代表着“Kernighan”,即《C程序设计语言》一书的作者之一(也不能忘记Aho和Weinberger)。使用awk
可以构建学术抄袭检测器。
GNU awk
(gawk
)具有众多扩展功能,包括最新版本的真正多维数组。还有其他变体的awk
,包括mawk
和nawk
。
这两个程序都使用正则表达式来选择和处理文本。
在文本中存在模式时,我倾向于使用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
当然,这些只是非常简单的例子,无法展示它们各自所提供的全部功能。
sed
功能的示例,请访问:http://sed.sourceforge.net/#scripts - Dennis Williamson1) awk和sed之间有什么区别?
两者都是处理文本的工具。但是awk可以做更多的事情,不仅仅是操作文本。它本身就是一种编程语言,具备大部分编程语言的特点,比如数组、循环、if/else流程控制等等。你也可以在sed中“编程”,但是你不想维护用它编写的代码。
2) sed和awk工具适用于哪些应用程序?
结论:对于非常简单的文本解析,请使用sed。对于其他任何情况,awk更好。实际上,你可以完全放弃sed,只使用awk。由于它们的功能重叠且awk能够做更多的事情,所以只需使用awk。这样还可以减少学习曲线。
sed
,'s/search/replace'
比 awk
的语法更容易输入,并且大多数情况下这就是你所需要的。 - sjas这两个工具都是为了处理文本而设计的,它们都能完成一些任务。
对我来说,区分它们的规则是:如果要自动执行在文本编辑器中手动完成的任务,请使用sed
。这就是为什么它被称为流式编辑器。(你可以使用相同的命令在vim中编辑文本)。如果你想要分析文本,比如计算字段数、统计总数、提取和重新组织结构等等,请使用awk
。
此外,不要忘记grep
。如果只想在文本(文件)中搜索/提取某些内容,请使用grep
。