Linux-grep、sed、awk

grep
grep:搜索文件中存在指定字符串的行
grep [选项] [–color=auto] ‘查找字符’ filename

-E: 搜索多个字符串中的任意一个
-c :计算找到‘查找字符’的次数
-i :忽略大小写
-n : 输出行号
-v : 反向选择,亦即显示出没有‘查找字符’内容的那一行
–color=auto :将找到的关键字部分加上颜色的显示

搜索多个字符串中的任意一个:

# 方式1:
grep -E "字串1|字串2|字串3|..." 文件名

# 方式2:
egrep "字串1|字串2|字串3|..." 文件名

find与grep区别:

  • find命令:在系统中搜索符合条件的文件名,采用完全匹配方式;联合通配符可进行模糊匹配
  • grep命令:在文件中搜索符合条件的字符串,采用模糊匹配方式;可联合正则表达式匹配,依循包含匹配

grep [-A] [-B] [–color=auto] ‘查找字符’ filename
参数:
-A:后面可加数字,为after的意思,除了列出该行外,后续的n行也列出来;
-B:后面可加数字,为before的意思,除了列出该行外,前面的n行也列出来;
–color=auto 可将正确的那个选取数据列出颜色

sed :是一种几乎包括在所有Unix平台(包括Linux)的轻量级流编辑器。sed主要用来将数据进行选取、替换、删除、新增的命令。
sed [选项] '[操作]' 文件名
参数:
-n 把经过sed命令处理的行进行输出,不加"-n"则会在sed处理数据的基础上再叠加输出所有数据
-e 允许对输入数据应用多条sed命令编辑
-i 不加"-i"只是临时修改(把修改的效果显示在屏幕上,实际的文件并未变化);
加"-i"则会修改到实际的文件内容,此时需要防止误操作;不输出到屏幕

操作说明:[n1 [,n2]] function
n1,n2 :不见得会存在,一般代表【选择进行操作的行数】,如操作需要在10到20行之间进行,则【10,20 [操作行为]】
function有下面这些内容:
i :行前插入。在当前行的前面插入一行or多行;
a :行后追加。在当前行的后面添加一行or多行;
c :替换。用"c"后面的字符串替换原数据行;
d:删除。因为是删除,所以d后面通常不接任何东西;
p:打印整行。输出指定的行,如: ‘np’,表示第n行;
s :替换字串。用一个字符串替换另一个字符串:sed 's/旧字串/新字串/g'

# 在指定行范围内操作
sed  ‘行范围s/旧字串/新字串/g’

# 对整个文档操作
sed  ‘s/旧字串/新字串/g’
#删除第3到最后一行 ($代表最后一行)
nl /etc/passwd | sed '3,$d'

#删除
…… | grep 'inet' | sed 's/^.*inet // g'

awk:提取列/字段(条件符合则执行对应操作;无条件时都会执行操作)
主要是处理每一行的字段内的数据,而默认的字段的分隔符为“空格键”或者“[Tab]键”,适合处理小型的文本数据
awk ‘条件1{操作1} 条件2 {操作2} …’ filename
awk 后面接两个单引号并加上大括号{}来设置想要对数据进行的处理操作。

last -n 5 | awk  '{print $1 "\t"  $3}'

通过print的功能将字段数据列出来(取第一列以及第三列)
NF :每一行($0)拥有的字段总数
NR: 目前awk所处理的是第几行数据
FS: 目前的分隔字符,默认是空格键
awk与cut对比:
1)awk对文档中按每个字段提取,逐行处理数据,不需要受分隔符的限制,使用范围相对更广;cut对文档中按列提取,严格受分隔符限制
2)文档中的数据,若有规范分隔符,cut和awk均可使用;若无规范的分隔符(如:不同长度的空格符),则建议使用awk按照字段提取。

排序命令sort:

sort [选项] 文件名
选项:
-f  忽略大小写
-n  以数值型进行排序(默认使用字符串型排序)
-r  反向排序(从大到小)
-t  指定分隔符(默认分隔符是制表符)
-k n[,m]    按照指定的字段范围排序:从第n个字段开始到第m个字段结束
           (不加'[,m]'则默认到整个行尾)

shell

SHELL25 nginx日志分析3-统计访问3次以上的IP

awk '{print $1}' nowcoder.txt|sort |uniq -c| awk '{if($1 > 3) print $1,$2}' | sort -t" " -rnk1

awk '{print $1}' nowcoder.txt #输出第一列
uniq -c                       #在每列旁边显示该行重复出现的次数
sort -t   #-t分隔符
-n 依照数值的大小排序
-r 以相反的顺序来排序
-k1 按第一列进行排序

SHELL24 nginx日志分析2-统计某个时间段的IP

grep "23/Apr/2020" | cut -c '-12' | sort -u | wc -l

sort -u #去重

SHELL23 nginx日志分析1-IP统计(done)

grep "23/Apr/2020"|awk '{print $1}'|sort|uniq -c|sort -r|awk '{print $1,$2}'

SHELL26 nginx日志分析4-查询某个IP的详细访问情况(done)

grep "192.168.1.22"|awk '{print $7}'|sort |uniq -c|sort -r|awk '{print $1,$2}'

SHELL27 nginx日志分析5-统计爬虫抓取404的次数

grep 'http://www.baidu.com/'|grep '404'|wc -l

SHELL28 nginx日志分析6-统计每分钟的请求数

cat nowcoder.txt | awk '{print substr($4,14,5)}' | sort | uniq -c | sort -rn -k 1 | awk '{print $1,$2}' 

substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分

SHELL29 netstat练习1-查看各个状态的连接数

grep 'tcp' nowcoder.txt|awk '{print $6}'|sort |uniq -c|sort -rnk1 | awk '{print $2,$1}'

SHELL30 netstat练习2-查看和3306端口建立的连接

grep '3306' nowcoder.txt |grep 'ESTABLISHED'|awk '{print $5}'|awk -F ':' '{print $1}'|sort |uniq -c|sort -rn|awk '{print $1,$2}'

你可能感兴趣的:(linux,运维,服务器)