可能重复:
What are the differences between Perl, Python, AWK and sed?
What is the difference between sed and awk?
也许不是一个非常具体的问题,但我对grep
,awk
和sed
在Unix / Linux系统管理和文本处理方面的作用感到困惑。
答案 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"
现在awk
和sed
完全不同于grep
。
awk
和sed
是文本处理程序。他们不仅能够在文本中找到您要查找的内容,还能够删除,添加和修改文本(以及更多内容)。
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)并使用它进行每个文本处理。