【发布时间】: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 系统管理和文本处理中的作用方面的区别感到困惑。
【问题讨论】:
可能重复:
What are the differences between Perl, Python, AWK and sed?
What is the difference between sed and awk?
也许不是一个非常具体的问题,但我对grep、awk 和sed 在 Unix/Linux 系统管理和文本处理中的作用方面的区别感到困惑。
【问题讨论】:
短定义:
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 用户。
【讨论】:
我只想提一件事,有很多工具可以做文本处理,e.g. 排序、剪切、拆分、连接、粘贴、comm、uniq、列、rev、tac、tr、nl、pr、head、tail.....
它们非常方便,但您必须了解它们的选项等。
学习文本处理的一种懒惰方式(不是最好的方式)可能是:只学习 grep 、 sed 和 awk。有了这三个工具,你几乎可以解决 99% 的文本处理问题,而且不需要死记硬背以上不同的 cmd 和选项。 :)
而且,如果您已经学习并使用了这三种方法,您就会知道其中的区别。其实这里的区别就是哪个工具擅长解决什么样的问题。
一种更懒惰的方法可能是学习一种脚本语言(python、perl 或 ruby)并用它来处理所有文本。
【讨论】:
如果您想快速搜索文件中匹配的行,Grep 很有用。它还可以返回一些其他简单的信息,例如匹配行号、匹配计数和文件名列表。
Awk 是一种完整的编程语言,它围绕读取 CSV 样式文件、处理记录以及可选地打印出结果数据集而构建。它可以做很多事情,但它不是用于简单任务的最简单工具。
当您想根据正则表达式更改文件时,Sed 很有用。它允许您轻松匹配部分线条、进行修改和打印结果。它不如 awk 富有表现力,但这使它更容易用于简单的任务。它有许多更复杂的运算符可供您使用(我认为它甚至是图灵完备的),但通常您不会使用这些功能。
【讨论】: