- awk和sed有什么区别?
- sed和awk工具的最佳用例是哪种应用程序?
Answers:
sed
是流编辑器。它每行处理字符流。它具有一种原始的编程语言,其中包括goto式循环和简单的条件(除了模式匹配和地址匹配之外)。本质上只有两个“变量”:模式空间和保持空间。脚本的可读性可能很困难。数学运算充其量是非常笨拙的。
有各种版本的sed
命令行选项和语言功能具有不同级别的支持。
awk
每行都面向定界字段。它具有更强大的编程构造包括if
/ else
,while
,do
/ while
和for
(C-风格和阵列迭代)。完全支持变量和一维关联数组以及(IMO)跳越多维数组。数学运算类似于C中的运算。它具有printf
和函数。“ AWK”中的“ K ”代表“ K ernighan”,就像《 C编程语言》一书中的“ Kernighan and Ritchie”一样(不要忘记A ho和W einberger)。可以想象,可以使用编写一个学术窃的检测器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
当然,这些只是非常简单的示例,并未说明每个示例必须提供的全部功能。
1)awk和sed有什么区别?
两者都是用于转换文本的工具。但是awk不仅可以处理文本,还可以做更多的事情。它本身就是一种编程语言,它包含您在编程中学习的大多数知识,例如数组,循环,if / else流控制等。您也可以对sed进行“编程”,但是您不想保留其中编写的代码。
2)sed和awk工具的最佳用例是哪种应用程序?
结论:使用sed进行非常简单的文本解析。除此之外,awk更好。实际上,您可以完全放弃sed,而仅使用awk。由于它们的功能重叠并且awk可以做更多的事情,所以只需使用awk。您还将减少学习曲线。
sed
,'s/search/replace'
比awk
的语法更容易输入,这是您大多数时候需要的。