Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux grep、awk和&;塞德?_Linux_Bash_Sed_Awk_Grep - Fatal编程技术网

Linux grep、awk和&;塞德?

Linux grep、awk和&;塞德?,linux,bash,sed,awk,grep,Linux,Bash,Sed,Awk,Grep,可能重复: 也许不是一个非常具体的问题,但我对grep、awk和sed在Unix/Linux系统管理和文本处理中的作用感到困惑 Grep对于快速搜索文件中匹配的行非常有用。它还可以返回一些其他简单信息,如匹配行号、匹配计数和文件名列表 Awk是一种完整的编程语言,它围绕着读取CSV样式的文件、处理记录以及打印结果数据集而构建。它可以做很多事情,但它不是用于简单任务的最简单工具 当您希望基于正则表达式对文件进行更改时,Sed非常有用。它允许您轻松地匹配部分行、进行修改和打印结果。它的表现力不如

可能重复:


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

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

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

当您希望基于正则表达式对文件进行更改时,Sed非常有用。它允许您轻松地匹配部分行、进行修改和打印结果。它的表现力不如awk,但这使得它更容易用于简单任务。它有许多更复杂的运算符可以使用(我认为它甚至是图灵完备的),但一般来说,您不会使用这些特性。

简短定义:

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

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
我建议您阅读本书:


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

我只想提一件事,有许多工具可以进行文本处理,例如。 排序、剪切、拆分、连接、粘贴、通信、uniq、列、修订、tac、tr、nl、pr、头、尾

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

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

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


一种更懒惰的方法可能是学习一种脚本语言(python、perl或ruby)并用它处理每一个文本

使用AWK和Grep搜索文件中的行的速度一样快。这是这里描述的第一种情况:。取决于除模式匹配之外要执行的作业的复杂性。如果除了模式魔法之外还有很多逻辑,那么Python将是一个更好的选择,如果周围的逻辑更简单,SEd/Grep/AWK。实际上,按照这条推理路线,您可以建议只学习和使用AWK,因为它可以完成SEd和Grep所能做的大部分工作。这不应该是一个答案,因为它不能回答OPs问题。
$ 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