ChatGPT解决这个技术问题 Extra ChatGPT

grep、awk 和 sed 有什么区别? [复制]

这个问题在这里已经有了答案:10 年前关闭。

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

也许不是一个非常具体的问题,但我对 grepawksed 在 Unix/Linux 系统管理和文本处理中的作用方面的区别感到困惑。


t
thegrinner

简短定义:

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

$ 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 用户。


K
Kurt Stutsman

如果您想快速搜索文件中匹配的行,Grep 很有用。它还可以返回一些其他简单信息,例如匹配行号、匹配计数和文件名列表。

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

当您想根据正则表达式更改文件时,Sed 很有用。它允许您轻松匹配部分线条、进行修改和打印结果。它不如 awk 富有表现力,但这使它更容易用于简单的任务。它有许多您可以使用的更复杂的运算符(我认为它甚至是图灵完备的),但通常您不会使用这些功能。


使用 AWK 可以像使用 Grep 一样快地搜索文件中的行。这是此处描述的第一种情况:grep vs awk : 10 examples of pattern search (theunixschool)
K
Kent

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

它们非常方便,但您必须了解它们的选择等。

学习文本处理的一种懒惰方式(不是最好的方式)可能是:只学习 grep 、 sed 和 awk。使用这三个工具,您可以解决几乎 99% 的文本处理问题,并且无需记住以上不同的 cmd 和选项。 :)

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

一种更懒惰的方法可能是学习一种脚本语言(python、perl 或 ruby)并使用它进行所有文本处理。


除了模式匹配之外,还取决于工作的复杂性。如果除了模式魔法之外还有很多逻辑,Python 会是更好的选择,如果周围的逻辑更简单,SEd/Grep/AWK。
实际上,按照这种推理,您可以建议只学习和使用 awk,因为它可以完成 sed 和 grep 可以完成的大部分工作。
这不应该是一个答案,因为它没有回答 OPs 的问题。