grep,awk和sed之间的差异

可能重复:
Perl,Python,AWK和sed有什么区别?
sed和awk有什么区别?

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

简短定义:

grep :search文件中的特定术语

 #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是文本处理器。 他们不仅能够在文本中find您要查找的内容,还能够删除,添加和修改文本(以及更多)。

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


桑达

 $ 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 

我build议你读这本书: Sed&Awk:2nd Ed。

它将帮助你在任何类Unix环境中成为精通的sed / awk用户。

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

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

当您想要基于正则expression式对文件进行更改时,sed很有用。 它使您可以轻松地匹配部分线条,进行修改并打印结果。 它不如awkperformance力强,但是它使得它可以轻松地用于简单的任务。 它有更复杂的操作你可以使用(我认为它甚至是完整的),但是一般来说你不会使用这些特性。

我只想提一个东西,有很多工具可以做文本处理,例如sorting,剪切,拆分,join,粘贴,通信,uniq,列,rev,tac,tr,nl,pr,head,tail … ..

他们非常方便,但你必须学习他们的select等。

学习文本处理的一种懒惰的方式(不是最好的方法)可能是:只学习grep,sed和awk。 有了这三个工具,你可以解决几乎99%的文本处理问题,不需要记住以上不同的cmds和选项。 🙂

而且,如果你已经学会和使用这三个,你就知道它们的区别。 其实这里的区别是指哪个工具擅长解决什么样的问题。

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