shell文本处理工具

1 grep

命令含义
grep标准正则表达式
egrep = grep -E扩展正则表达式

1.1 grep格式

格式:grep 匹配条件 处理文件

命令含义
grep root passwd过滤root关键字
grep ^root passwd以root开头的
grep root$ passwd以root结尾的
grep -i root passwd忽略大小写
grep -E “<root” passwdroot字符之前不能有字符
grep -E “root>” passwdroot字符之后不能有字符
grep -数字显示过滤行以及上面几行和下面几行
grep -n显示匹配的行所在的行号
grep -A显示过滤行以及下面几行
grep -B显示过滤行以及上面几行
grep -V反向过滤

1)复制文件作为实验素材:
在这里插入图片描述
编辑该文件,删除部分内容:
在这里插入图片描述
2)西面命令分别表示,将含有root的过滤出来;不区分大小写的过滤;反向过滤,不含root的;
在这里插入图片描述
3)grep在过滤的时候是贪婪过滤,含有root的都会过滤出来,想要过滤只含root前面或后面没有其他字符的,可以使用下面的命令:
在这里插入图片描述
4)过滤root在第一个的;过滤root在最后一个的,因为没有root在最后,所以没有显示结果:
在这里插入图片描述
5)过滤root不在第一或不再最后的:
在这里插入图片描述
6)过含有mail的行;过滤mail上下五行;过滤mail的前面五行;过滤mail后面五行
在这里插入图片描述
查看mail所在的行号:
在这里插入图片描述

1.2 grep字符数量匹配规则

表示方法含义
^westos以westos开始
westos$以westos结尾
w…sw开头s结尾中间4个任意字符
…ss结尾前面5个任意字符
*字符出现任意
?0到1次
+1次到任意次
{n}n次
{m,n}m到n次
{0,n}0-n次
{,n}0-n次
{m,}最少m次
(ed){2}ed字符串出现两次

1)建立实验素材,过滤时一个点代表一个字符:
在这里插入图片描述
2)*表示中间可以有无数个;?表示出现0-1次:
在这里插入图片描述
3)e至少出现1次;e出现1-3次;e至少出现4次;e至多出现两次:
在这里插入图片描述
4)ed出现任意多次;ed至少出现一次;+表示ed出现一次到任意次,但不能是0次,*表示任意多次可以出现0次;e出现一次到任意次:
在这里插入图片描述

1.3 练习脚本

请显示系统中能被su命令切换的用户名称:
在这里插入图片描述

2 sed

命令格式:

  • sed 参数 命令 处理对象
  • sed 参数 处理对象 -f 处理规则文件

2.1 对字符的处理

s代表替换;g表示全局,不叫g默认是替换每一行的第一个 ;默认改了是不会保存的,加-i是修改并保存到原文件中;-e的作用: 高级匹配,可以使用更复杂的正则表达式

  • p --> 显示
命令含义
sed -n 5p westos显示第五行
sed -n 3,5p westos显示三到五行
sed -ne 3p;5p westos显示三和五行
sed -ne 1,5p westos显示1-5行
sed -ne ‘5,$p’ westos五到最后一行
sed -n ‘/^#p’ westos显示以#开头的行

1)将passwd中的sbin替换成westos,注意这是临时的,显示出来的内容变了,但实际上并没有保存到文件中:
在这里插入图片描述
查看原文件,内容并未发生改变:
在这里插入图片描述
2)上一条命令也可以,在文件中写入规则,然后执行规则,效果一样:
在这里插入图片描述
3)显示第5行,没有行号不方便看实验效果,所以将文件加上行号,使用-b参数实现:
在这里插入图片描述
显示第5行;显示5-7行;显示第五行和第七行;显示第五行到最后
在这里插入图片描述
显示第一行到第五行:
在这里插入图片描述
显示有bash的行:
在这里插入图片描述

  • d --> 删除
命令含义
sed 5d westos删除第五行
sed ‘/^#/d’ fstab把#开头的行删除
sed ‘’^UUID/!d’ fstab除了UUID以外的行都删除
sed -e ‘5,$d’ westos第五行之后的,都删除

1)删除第五行;删除第五行以及第五行之后:
在这里插入图片描述
2)将有含bash的行删除:
在这里插入图片描述
3)建立实验素材:
在这里插入图片描述
删除该文件里面的空行:
在这里插入图片描述
将空行删除,然后保存到文件;在第一行添加hello westos,并保存在文件中:
在这里插入图片描述

  • a --> 添加
命令含义
sed -e ‘$a hello word’ fstab最后一行添加
sed -e ‘$a hello\word’ fstab将hello和word换行在最后一行添加
sed -e‘/^#/a hello word’ fstab所有以#开头的行后面添加

1)在第一行添加hello westos,并保存在文件中:
在这里插入图片描述
2)给以#开头的行添加:
在这里插入图片描述
3)给最一行添加:
在这里插入图片描述

  • c --> 替换
命令含义
sed -e ‘/^#/c hello word’所有以#开头的行都换成hello word
sed -e ‘5chello word’将第5行换成hello word

将以#开头的行替换成hello westos:
在这里插入图片描述

  • w --> 把符合的行写入指定文件中
命令含义
sed ‘/^UUID/w file’ westos把westos中UUID开头的行写到副ile中

把符合以#开头的行,写到指定的westos文件中:
在这里插入图片描述

  • i --> 插入
命令含义
sed ‘5ihello’ westos在第五行插入

在第一行前插入hello westos:
在这里插入图片描述

  • r --> 整合文件
命令含义
sed ‘5r haha’ westos将westos文件插入到haha文件的第五行

整合文件 ,将fstab文件插入到westos文件的第二行:
在这里插入图片描述

  • 字符替换

1)替换全文的#为空:
在这里插入图片描述
2)将前面有#的显示出来:
在这里插入图片描述
3)将冒号替换成空,不加g默认是替换每一行的第一个:
在这里插入图片描述
加了g表示将全局的‘:’都替换成空:
在这里插入图片描述
4)将全文的sbin替换成westos:
在这里插入图片描述
将1到5行的sbin替换成westos:
在这里插入图片描述
第五行之后的sbin都换成westos:
在这里插入图片描述
从lp到mail之间的sbin都替换成westos:
在这里插入图片描述
将sbin都替换成westos;nologin都替换成liu:
在这里插入图片描述
5)想要替换‘/’时,不能直接如下面第一条命令这样写,它是特殊字符,需要转译,如下第二条命令:
在这里插入图片描述
该命令中的@和/作用相同,可以相互替换使用:
在这里插入图片描述
6)-i参数表示修改并保存到文件中:
在这里插入图片描述

2.2 练习脚本

编辑一个脚本,在后面写入数字,http的端口就会改为此数字

3 awk

用法:awk -F 分割副 BEGIN{ }{ } END{ } filename
举例:awk -F : ‘$6!~/home/&&/bash$/{print}’ /etc/passwd
表示/etc/passwd文件的第六列,没有home关键字并且以bash结尾的行。

命令含义
NR行数
NF列数
FILENAME文件名称本身
westos不加引号,默认是变量
“westos”加了引号表示字符串

1)-F是指定分割副为‘:’,打印第一列,不指定时分割副时,默认时以空格作为分割副的:
在这里插入图片描述
2)打印全部列:
在这里插入图片描述
3)打印第二列:
在这里插入图片描述
4)在开始处打印WESTOS,这里之所以没有打印是一位内WESTOS没有加双引号,这样会被当作是一个参数而不是一个字符串:
在这里插入图片描述
加上双引号就打印出来:
在这里插入图片描述
5)在结尾处打印END:
在这里插入图片描述
6)打印行数:
在这里插入图片描述
打印列数:
在这里插入图片描述
7)打印文件名称:
在这里插入图片描述

 bash$  条件 
 /条件1|条件2/   ## 条件1或者条件2  
 /条件1||条件2/  ## 条件1或者条件2  
 /条件1&&条件2/  ## 条件1并且条件2 
 $0            ##表示该脚本名称  
 $1            ##第一列
 $2            ##第二列
 $#            ##所有参数个数
 $*            ##所有参数,该符号会把所有参数看做一个整体
 $@            ##所有参数,该符号会把每个参数分别看待
 $?            ##最后一次执行命令的返回状态

1)//里面写的是条件,$表示以bash结尾的打印出来第一列和第七列:
在这里插入图片描述
2)条件是以bash结尾或者有root的打印第一列和第七列:
在这里插入图片描述
3)条件是以bash结尾而且有root的打印第一列和第七列:
在这里插入图片描述
4)条件是以bash结尾或者有root打印第一列和第七列:
在这里插入图片描述
5)第七列是/bin/bash的,打印所有的列:
在这里插入图片描述

3.1 练习脚本

统计在系统中能su切换用户并且用户家目录不在/home下的用户数量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值