请选择 进入手机版 | 继续访问电脑版
MSIPO技术圈 首页 IT技术 查看内容

shell脚本的基本应用:正则表达式、grep、sed、awk、测试

2023-07-13

目录

一、正则表达式

1、正则表达式的作用正则表达式的组成

2、正则表达式的常见选项和正则表达式常见的元字符

3、正则表达式的基本应用

4、扩展正则表达式

二、sed和awk

1、sed的作用和sed的工作流程

2、sed命令常见的选项和操作符

3、sed的基本应用

4、awk的使用

5、awk的基本应用

测试、命令行仅输出IP地址


一、正则表达式

1、正则表达式的作用正则表达式的组成

1)正则表达式的作用

针对文件或者文本内容进行处理

帮助用户快速查找文本文件内容

2)正则表达式的组成

普通字符

大写A-Z

小写a-z

符号

元字符

2、正则表达式的常见选项和正则表达式常见的元字符

1)正则表达式grep常见的选项

-n:显示行号

-o:只显示匹配内容

-i:不区分大写或者小写字母

-v:取反

-E支持扩展

-q静默执行

-w: 识别为单词

-c: 统计匹配的行数

2)正则表达式的元字符

^:匹配行起始内容

$:匹配行结束内容

.:匹配任意单字符

.*:匹配任意字符

[]:匹配括号里边的内容

[-]:匹配括号里边内容的范围

{n}:匹配的范围的次数

[n1-n2]:匹配开始和结束内容

{ n,m }:重复前面的一个字符n到m次

{ n, }:重复前面的一个字符至少n次

[^]:匹配括号之外的任意字符

\:转义字符

\<: 固定词首

\>: 固定词尾

3、正则表达式的基本应用

1)过滤关键字是the显示出来

[root@centos01 ~]# grep -n 'the' test.txt

2)查看行开始是the显示出来

[root@centos01 ~]# grep -n '^the' test.txt

3)匹配任意单个字符

[root@centos01 ~]# grep -n 'w.d' test.txt

4)匹配括号里边的内容

[root@centos01 ~]# grep -n 'sh[io]rt' test.txt

5)只显示匹配的内容

[root@centos01 ~]# grep -o 'wod' test.txt

6)通配符应用匹配开始是w结束是d中间的任意字符

[root@centos01 ~]# grep -n 'w*d' test.txt

7)转移字符的基本应用,过滤IP地址信息

[root@centos01 ~]# grep -n -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" test.txt

4、扩展正则表达式

1)扩展正则表示常见的元字符

+:重复一次或者多次前面字符显示出来

?:显示当前字母前一个字符

|:或者,显示多个字符

():查找组字符串

()+:辨别多个重复组

2)扩展正则表达式的应用

[root@centos01 ~]# egrep -n 'wo+d' test.txt

将重复o的内容显示出来

[root@centos01 ~]# egrep -n '?d' test.txt

将d前边内容显示出来

[root@centos01 ~]# egrep -n 'linux|Linux' test.txt

将匹配的linux或者Linux显示出来

[root@centos01 ~]# egrep -n '(h|o|r)' test.txt

将包含h、o、r的字符所在行内容显示出来

[root@centos01 ~]# egrep -n 's(hor)t' test.txt

将开头s结束t中间连续是hor的单词显示出来

二、sed和awk

1、sed的作用和sed的工作流程

1)sed的作用

sed是一个文本文件解析转换工具

用于读取、修改、显示数据

2)sed的作用流程

读取数据:从文件、输入、管道命令中读取数据,临时存储数据

执行:根据sed命令在模式操作空间中进行无交互修改数据

显示:将文本文件的修改结果进行打印显示

2、sed命令常见的选项和操作符

1)sed命令选项

-n:显示处理后的结果

-h:显示帮助

-e:指定命令或者脚本处理输入的文本文件

-f:指定脚本处理输入的文本文件

-i:直接编辑文本文件

2)sed的操作符号

a:添加内容

d:删除内容

p:打印内容

s:替换内容

y:字符转换

c:将特定行替换成指定的内容

3、sed的基本应用

1)显示1到5行数据

[root@centos01 ~]# sed -n '1,5p' test.txt

2)显示奇数行

[root@centos01 ~]# sed -n -e '1p;3p;5p' test.txt

3)删除第一行数据

[root@centos01 ~]# sed '1d' test.txt

4)删除空行

[root@centos01 ~]# sed -i '/^$/d' test.txt

5)将大写THE修改为小写the

[root@centos01 ~]# sed -i 's/THE/the/' test.txt

6)ip关键字添加注释

[root@centos01 ~]# sed -i '/^ip/s/^/#/' test.txt (含有ip字符的行前面添加#)

7)迁移字符将1~5行迁移到15行后

[root@centos01 ~]# sed -i '1,5{H;d};15G' test.txt

8)将1~5行移动到15行和16行之间

[root@centos01 ~]# sed -i '1,5H;15,16G' test.txt

[root@centos01 ~]#ifconfig ens32 | sed –n ‘2 s/.*inet  //p’| sed ‘s/n.*//’

[root@centos01 ~]#ifconfig ens32 |sed  -nr  '2 s/.*et  (.*)  n.*/\1/gp'

4、awk的使用

1)awk的作用

过滤和读取数据使用

2)awk的变量

FS:文本字段的分隔符,可以使用空格为占位符

NF:处理行数

NR:处理数据的行号

$0:处理数据的整行数据

$n:处理数据行的第几列数据

5、awk的基本应用

1)显示所有内容

[root@centos01 ~]# awk '{print}' 1.txt

2)显示第一列数据

[root@centos01 ~]# awk '{print $1}' 1.txt

3)在第一列和第二列之间添加--

[root@centos01 ~]# awk '{print $1"--"$2}' 1.txt

4)显示第一行和第二行数据

[root@centos01 ~]# awk 'NR==1,NR==2{print}' 1.txt

5)   sort   排序

[root@centos01 ~]#sort –nr 123   #排序  r是逆序 

[root@centos01 ~]#sort 123 | uniq –c   #去重,统计出现次数

[root@centos 01~]# history | awk '{print $2}' | sort |uniq -c |sort -nr |head -5

[root@centos ~]# history | awk '{print $2}' | sort |uniq -c |sort -nr |sed -n '1,5p'

#将用过的命令从大到小排列,取前5个

[root@centos ~]# history | awk '{print $2}' | sort |uniq -c |sort -nr |awk 'NR<=5{print}'

 

测试、命令行仅输出IP地址

[root@bogon ~] ip a|awk 'NR==9{print$2}' 
192.168.1.12/24
[root@bogon ~] ip a|sed -n '9 s/.*inet//p'|sed 's/b.*//' 
 192.168.1.12/24 

2.查看web的log日志,检测出异常IP

cat www.new1019.xianqujingpinwang.log| sed -n '/23\/Nov\/2022:0/,/23\/Nov\/2022:12/p'|grep `date "+%d/%b"`|awk '{print $1}'|sort |uniq -c |sort -rn|wc -l 

#12个小时内谁访问量最多

相关阅读

热门文章

    手机版|MSIPO技术圈 皖ICP备19022944号-2

    Copyright © 2024, msipo.com

    返回顶部