grep,awk和sed之间的差异
可能重复:
Perl,Python,AWK和sed有什么区别?
sed和awk有什么区别?
也许不是一个非常具体的问题,但是我对grep
, awk
和sed
在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"
现在awk
和sed
完全不同于grep
。 awk
和sed
是文本处理器。 他们不仅能够在文本中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),并使用它进行每个文本处理。