grep、awk 和 sed 有啥区别? [复制]
Posted
技术标签:
【中文标题】grep、awk 和 sed 有啥区别? [复制]【英文标题】:What are the differences among grep, awk & sed? [duplicate]grep、awk 和 sed 有什么区别? [复制] 【发布时间】:2011-12-05 08:56:12 【问题描述】:可能重复:What are the differences between Perl, Python, AWK and sed?What is the difference between sed and awk?
也许不是一个非常具体的问题,但我对grep
、awk
和sed
在 Unix/Linux 系统管理和文本处理中的作用方面的区别感到困惑。
【问题讨论】:
【参考方案1】:短定义:
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 -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 用户。
【讨论】:
【参考方案2】:我只想提一件事,有很多工具可以做文本处理,e.g. 排序、剪切、拆分、连接、粘贴、comm、uniq、列、rev、tac、tr、nl、pr、head、tail.....
它们非常方便,但您必须了解它们的选项等。
学习文本处理的一种懒惰方式(不是最好的方式)可能是:只学习 grep 、 sed 和 awk。有了这三个工具,你几乎可以解决 99% 的文本处理问题,而且不需要死记硬背以上不同的 cmd 和选项。 :)
而且,如果您已经学习并使用了这三种方法,您就会知道其中的区别。其实这里的区别就是哪个工具擅长解决什么样的问题。
一种更懒惰的方法可能是学习一种脚本语言(python、perl 或 ruby)并用它来处理所有文本。
【讨论】:
除模式匹配外,还取决于工作的复杂性。如果除了模式魔法之外还有很多逻辑,Python 会是更好的选择,如果周围的逻辑更简单,SEd/Grep/AWK。 实际上,按照这种推理方式,您可以建议只学习和使用 awk,因为它可以完成 sed 和 grep 可以完成的大部分工作。 这不应该是一个答案,因为它没有回答 OPs 的问题。【参考方案3】:如果您想快速搜索文件中匹配的行,Grep 很有用。它还可以返回一些其他简单的信息,例如匹配行号、匹配计数和文件名列表。
Awk 是一种完整的编程语言,它围绕读取 CSV 样式文件、处理记录以及可选地打印出结果数据集而构建。它可以做很多事情,但它不是用于简单任务的最简单工具。
当您想根据正则表达式更改文件时,Sed 很有用。它允许您轻松匹配部分线条、进行修改和打印结果。它不如 awk 富有表现力,但这使它更容易用于简单的任务。它有许多更复杂的运算符可供您使用(我认为它甚至是图灵完备的),但通常您不会使用这些功能。
【讨论】:
使用 AWK 搜索文件中的行的速度与使用 Grep 一样快。这是这里描述的第一个案例:grep vs awk : 10 examples of pattern search (theunixschool).以上是关于grep、awk 和 sed 有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Linux系列:grep过滤awk拆分sed替换的使用方法与区别
Linux bash 文本处理命令awk,sed,grep 用法