grep,awk和sed有什么区别?

use*_*609 121 linux bash awk grep sed

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

也许不是一个很具体的问题,但我感到困惑之间的差异grep,awksed在他们的Unix/Linux系统管理和文本处理的作用方面.

aay*_*ubi 176

简短定义:

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"
Run Code Online (Sandbox Code Playgroud)

现在awksed完全不同grep. awk并且sed是文本处理器.他们不仅能够在文本中找到您要查找的内容,还能够删除,添加和修改文本(以及更多内容).

awk主要用于数据提取和报告.sed是一个流编辑器
每个都有自己的功能和专业.

示例
Sed

$ sed -i 's/cat/dog/' file.txt
# this will replace any occurrence of the characters 'cat' by 'dog'
Run Code Online (Sandbox Code Playgroud)

AWK

$ awk '{print $2}' file.txt
# this will print the second column of file.txt
Run Code Online (Sandbox Code Playgroud)

基本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
Run Code Online (Sandbox Code Playgroud)

我建议你读这本书:Sed&Awk:2nd Ed.

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


Kur*_*man 52

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

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

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


Ken*_*ent 32

我只想提一件事,有很多工具可以做文本处理,例如sort,cut,split,join,paste,comm,uniq,column,rev,tac,tr,nl,pr,head,tail ...... ..

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

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

而且,如果你已经学会并使用了三者,你就会知道其中的差别.实际上,这里的区别意味着哪个工具擅长解决什么样的问题.

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

  • 取决于模式匹配除了工作的复杂性.如果除了模式魔法之外还有很多逻辑,如果周围的逻辑更简单,那么Python将是更好的选择,SEd/Grep/AWK. (4认同)
  • 实际上,按照这条推理思路,您可以建议只学习和使用 awk,因为它可以完成 sed 和 grep 的大部分功能。 (2认同)