grep,awk和amp;之间有什么区别? SED?

时间:2011-10-11 14:26:58

标签: linux bash sed awk grep

  

可能重复:
  What are the differences between Perl, Python, AWK and sed?
  What is the difference between sed and awk?

也许不是一个非常具体的问题,但我对grepawksed在Unix / Linux系统管理和文本处理方面的作用感到困惑。

3 个答案:

答案 0 :(得分:169)

简短定义:

grep:在文件中搜索特定字词

#usage
$ grep This file.txt
Every line containing "This"
Every line containing "This"
Every line containing "This"
Every line containing "This"

$ cat file.txt
Every line containing "This"
Every line containing "This"
Every line containing "That"
Every line containing "This"
Every line containing "This"

现在awksed完全不同于grepawksed是文本处理程序。他们不仅能够在文本中找到您要查找的内容,还能够删除,添加和修改文本(以及更多内容)。

awk主要用于数据提取和报告。 sed是一个流编辑器 他们每个人都有自己的功能和特色。

示例
SED

$ sed -i 's/cat/dog/' file.txt
# this will replace any occurrence of the characters 'cat' by 'dog'

awk中

$ awk '{print $2}' file.txt
# this will print the second column of file.txt

基本awk用法:
计算总和/平均/最大/分钟/等。什么你可能需要。

$ cat file.txt
A 10
B 20
C 60
$ awk 'BEGIN {sum=0; count=0; OFS="\t"} {sum+=$2; count++} END {print "Average:", sum/count}' file.txt
Average:    30

我建议您阅读本书:Sed & Awk: 2nd Ed.

它将帮助您在任何类似unix的环境中成为熟练的sed / awk用户。

答案 1 :(得分:51)

如果要快速搜索文件中匹配的行,Grep非常有用。它还可以返回一些其他简单信息,如匹配行号,匹配计数和文件名列表。

Awk是一种完整的编程语言,它围绕读取CSV样式文件,处理记录以及可选地打印出结果数据集而构建。它可以做很多事情,但它不是用于简单任务的最简单的工具。

当您想要基于正则表达式更改文件时,Sed非常有用。它允许您轻松匹配部分线条,进行修改并打印出结果。它的表现力不如awk,但这使得它更容易用于简单的任务。它有许多你可以使用的复杂操作符(我认为它甚至可以完成),但通常你不会使用这些功能。

答案 2 :(得分:32)

我只想提一件事,有很多工具可以做文字处理,例如 排序,剪切,分割,连接,粘贴,通讯,uniq,列,转速,tac,tr,nl,pr,head,tail .....

它们非常方便但你必须学习他们的选择等。

学习文本处理的懒惰方式(不是最好的方法)可能是:只学习grep,sed和awk。使用这三个工具,您可以解决近99%的文本处理问题,而不需要记住上面不同的cmds和选项。 :)

并且,如果你已经学会并使用了三者,你就会知道其中的差别。实际上,这里的差异意味着哪种工具善于解决何种问题。

更懒惰的方式可能是学习脚本语言(python,perl或ruby)并使用它进行每个文本处理。