sed和awk有什么区别?

Rac*_*hel 485 awk sed

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

Pau*_*ce. 535

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

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

awk以每行为基础定向分隔字段.它具有更强大的编程构造包括if/ else,while,do/ whilefor(C-风格和阵列迭代).完全支持变量和单维关联数组加上(IMO)kludgey多维数组.数学运算类似于C语言.它具有printf功能."AWK"中的" K "代表" K ernighan",如"C Programming Language"一书中的"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
Run Code Online (Sandbox Code Playgroud)

我会awk在文本看起来更像行和列时使用,或者awk将它们称为"记录"和"字段".如果我要执行与上面类似的操作,但仅在一个简单的逗号分隔文件中的第三个字段上,我可能会执行以下操作:

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

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

  • 要看一些推动`sed`边界的例子:http://sed.sourceforge.net/#scripts (7认同)
  • @blasto:我的建议是学习两者,但更重视awk.很多正则表达式都适用于(和其他工具和语言).使用sed更简单的东西,并尽量避免复杂的事情.你可以在sed中做循环和分支真的很酷,但结果命令行很复杂且难以阅读.你的问题的答案实际上取决于你正在做什么. (4认同)
  • @DennisWilliamson - 如果我只学习 awk,我是否处于劣势?awk 比 sed 更常用吗? (2认同)

gho*_*g74 119

1)awk和sed有什么区别?

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

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

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

  • ^^足够sed.(对不起,我不得不) (157认同)
  • 不要抛弃`sed`,'s/search/replace'`比'awk`的语法更容易输入,这是你大多数时候都需要的. (11认同)
  • 关于学习曲线的好点..太多的工具可以混淆..所以我更喜欢学习grep和awk ..让我们忘记sed :) (7认同)
  • 我发现sed更容易学习,所以你需要考虑到这一点.当你学习掌握awk时,快速学习sed以便能够更快地将它用于你可能不知道如何在awk中做的事情可能是有用的. (5认同)
  • 如果您是一名工匠,您会学习如何使用所有工具,并且知道何时使用哪些工具。如果您只是修理东西,一把锤子和螺丝刀可能就足够了。 (3认同)
  • 最好使用混合物。例如,如果您要在一个大文件中查找模式,请使用 grep 查找行号,然后使用 sed 编辑该行。否则,sed 处理整个文件的速度会慢得多。 (2认同)

hek*_*mgl 48

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

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

你也不应该忘记grep.使用grep,如果你只想搜索/文本(文件)中提取的东西