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?

也许不是一个非常具体的问题,但我对grepawksed 在 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"

现在awksedgrep 完全不同。 awksed 是文本处理器。他们不仅可以在文本中找到您要查找的内容,还可以删除、添加和修改文本(等等)。

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替换的使用方法与区别

find、grep、sed、awk的使用

linux三剑客的基本使用——grep、sed、awk

Linux bash 文本处理命令awk,sed,grep 用法

Linux的awk、grep、sed工具,实现文本查找、编辑 、格式化

linux shell提取字符串,awk? grep? sed?