欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

grep sed awk 3个Linux中对文件内容操作的命令

程序员文章站 2022-04-13 15:48:41
在学习Linux命令中,发现3个有关于文件内容操作的命令grep,sed和awk,在这里简单汇总这3个命令主要作用,在实际中找到最合适的情景应用,详细用法可以参考其他文章。 1、grep命令 主要作用:用于搜索文件中特定字符串,并输出整行内行 命令格式:grep [选项参数] "搜索内容" 文件(选 ......

  在学习linux命令中,发现3个有关于文件内容操作的命令grep,sed和awk,在这里简单汇总这3个命令主要作用,在实际中找到最合适的情景应用,详细用法可以参考其他文章。

1、grep命令

主要作用:用于搜索文件中特定字符串,并输出整行内行

命令格式:grep [选项参数] "搜索内容" 文件(选项参数-r时为目录)

选项参数:-v 反选;-i忽略大小写;-r 递归;-n显示匹配位于第几行及内容;-c统计有多少行被匹配;-a之前多少行内容;-b之后多少行内容;-c前后多少行内容

例子:grep -n "hello" test.txt  搜索test文件中某行是否包含hello,输出在文件中该行数和行内容

2、sed命令

主要作用:主要作用于一整行内容。可以作用于特定的行数据,也可以作用于搜索出的字符串所在的行。确定所搜索的特定字符串或行内容,可以进行输出、删除、写入文件、替换操作。

命令格式:sed [选项参数] '搜索内容和搜索命令(按照一定的格式)' 文件

选项参数:-n 不需要打印多余的输出 -e 多条命令

搜索内容:可以包含正则匹配

搜索命令:d 删除;p 打印;w写入特定文件;s/// 正则匹配特定字符串替换删除;y/// 搜索特定字符串替换删除;&增加内容;() 匹配后为组,可在之后使用;,之间内容

例子:sed -n '/hello/p' test.txt  搜索包含hello的行,输出

sed 's/hello/hi/' test.txt  搜索hello字符串替换为hi

sed '/^[hh]ello/s/world/planet/' test.txt  搜索行首为hello或hello的行,将行内world字符替换为planet

sed 's/\(hello\)\(.*\)/\2 \1/' test.txt  搜索hello字符串以空格包装,其余的字符以另一个空格包装,将其所有匹配到的替换为以空格包装的重排列的字符串顺序

3、awk命令

主要作用:可以用于搜索文件中特定字符串,输出整行内容;可以按照给定的分隔符,分隔一行内容,进行一系列操作,操作代码类似c语言代码。

命令格式:awk [选项参数] '命令 begin{代码} {代码} end{代码}' 文件

选项参数:-f 分隔符;-v变量 设置变量

命令:运算符(> < + - ! in $(字段引用) ~(匹配正则))

代码包含:print;数组;if;while;for;

例子:

awk -f: '$1=="hello" {print $0}' test.txt  以:为分隔符,找到第一段字符为hello字符的行 输出该行

awk '$1~/^[hh]/ {print $0}' test.txt  默认以空格为分隔符,找到第一段字符以h或h为头字符的行 输出该行

awk 'begin{print ("company", "salarysum")} {a[$1]+=$3} end{for (i in a) print (i, a[i])}' salary.txt

第一行输出company salarysum,下面将第一字段(即分公司号)作为数组的key,将第三字段(即工资)作为数组的value相加,最后遍历数组输出所有的分公司号和工资总和

4、实际例子实操

4.1 linux中访问日志如下:

10/jan/2019:09:10:12

10/jan/2019:09:13:39

10/jan/2019:09:15:41

10/jan/2019:09:40:45

10/jan/2019:10:22:32

10/jan/2019:11:24:22

10/jan/2019:11:24:49

10/jan/2019:16:55:23

统计每5分钟的主机访问数量

4.2 访问日志ip如下:

192.168.0.1 success

192.168.0.2 success

192.168.0.3 success

192.168.0.2 failed

192.168.0.1 success

192.168.0.1 failed

192.168.0.4 success

统计有多少单独个ip访问、找到访问最频繁的2个ip、访问2次以上的ip

 

4.1 awk -f: '{a[$2":"$3-$3%5]+=1}end{for (i in a) print(i, a[i])}' log | sort

4.2 awk '{print $1}' log | sort -n | uniq | wc -l

awk '{print $1}' log | sort -n | uniq -c | sort -nr | head -n 2

awk '{print $1}' log | sort -n | uniq -c | awk '$1>=2 {print $0}'

 

写博客的目的首先为的自己有所长进,如果能帮到您,我非常高兴的。

勤加思考,行动起来,祝我们喜欢自己。