shell脚本常用命令(含文本处理的正则表达式grep sed awk)

需要知道
正则表达式
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念
正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本
许多程序设计语言都支持利用正则表达式进行字符串操作,例如,在Perl中就内建了一个功能强大的正则表达式引擎
正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的
正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”
这个“规则字符串”用来表达对字符串的一种过滤逻辑
正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式
就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑
正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串

一、grep文本过滤命令

==有关grep:==全面搜索研究正则表达式并显示出来
grep 命令是一种强大的文本搜索工具 , 根据用户指定的“模式”对目标文本进行匹配检查 , 打印匹配到的行
由正则表达式或者字符及基本文本字符所编写的过滤条件

首先准备实验筛选文件:
在这里插入图片描述
在这里插入图片描述
常用命令:1.grep 匹配条件 处理文件

grep root passwd筛选passwd中有root字符的
grep ^root passwd筛选passwd中以root字符开头的
grep root$ passwd筛选passwd中以root字符结尾的
grep -i root passwd筛选passwd中有root字符的且不区分大小写
grep -E "rootROOT" passwd

如图:
/1.grep "root" passwd 筛选passwd中有root字符的
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

grep "root" passwd -in	

筛选passwd中有root字符的且不区分大小写,显示行号

在这里插入图片描述
grep "root" passwd -i 筛选passwd中有root字符的且不区分大小写
在这里插入图片描述

grep -in "^root" passwd	

筛选passwd中以root字符开头的并显示行号

在这里插入图片描述
在这里插入图片描述

grep -Ein "^root|root$" passwd 	

筛选passwd中以root字符开头或结尾的并显示行号

在这里插入图片描述
grep ROOT passwd -2 筛选passwd中有root字符,并且的上下两行也显示
在这里插入图片描述

grep root passwd -v		

显示除了所筛选的字符

在这里插入图片描述

grep root passwd -2		

所筛选字符的上下两行也显示

在这里插入图片描述

查看passwd文件并且显示行号

在这里插入图片描述

查看并且过滤包括lp的行

在这里插入图片描述

打印匹配以及匹配行的上下2行

在这里插入图片描述

打印匹配行的后两行

在这里插入图片描述

打印匹配行的前两行

在这里插入图片描述

2.正则表达式; grep "w....s" file 打印w和s中间包括四个字符的行

在这里插入图片描述

grep "w...." file     打印w开头,后面四个字符的行

在这里插入图片描述

grep "....s" file    打印s结尾,前面四个字符的行

在这里插入图片描述
3.grep中字符的匹配次数设定

*字符出现[0-任意次]
?字符出现[0-1次]
+字符出现[1-任意次]
{n}字符出现[n次]
{m,n}字符出现[至少m次,最多出现n次]
{0,n}字符出现[0-n次]
{m,}字符出现[至少m次]
(xy){n}xy关键字出现[n次]
.*关键字之间匹配任意字符

首先编辑实验筛选文件
在这里插入图片描述
在这里插入图片描述

打印含有ab的行

在这里插入图片描述

打印含有ab或者a和b之间有0-任意多字符的行

在这里插入图片描述

打印b前面出现0-1次a的行

在这里插入图片描述

打印b前面至少出现一次a的行

在这里插入图片描述

打印b前面出现两次a的行

在这里插入图片描述

打印b前面a最少出现两次,最多出现三次的行

在这里插入图片描述

打印b前面a至少出现2次的行

在这里插入图片描述

打印b前面a出现0-2次的行

在这里插入图片描述

打印a和b之间出现0-多个字符的行

在这里插入图片描述

打印b前面有0-多个a的行

在这里插入图片描述
在这里插入图片描述
(2)grep中字符的匹配位置设定

^关键字以xx开头
关键字&以xx结尾
<关键字以xx开头
关键字>以xx结尾
<关键字>含xx

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意
grep 正则表达式与扩展正则表达式
正规的 grep 不支持扩展的正则表达式子 , 竖线是用于表示”或”的扩展正则表达式元字符 , 正规的 grep 无法识别
加上反斜杠 , 这个字符就被翻译成扩展正则表达式 , 就像 egrp,和grep -E 一样

二、sed行编辑器
sed命令的概念
SED是一项Linux指令,功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大
sed用来操作纯 ASCII 码的文本
处理时 , 把当前处理的行存储在临时缓冲区中 , 称为“模式空间” (pattern space) ,可以指定仅仅处理哪些行
sed 符合模式条件的处理,不符合条件的不予处理,处理完成之后把缓冲区的内容送往屏幕
接着处理下一行 , 这样不断重复 , 直到文件末尾
原来的内容是在磁盘当中放着,现在用sed命令处理的时候将内容掉入内存的一个地方用户处理,这个处理空间也叫模式空间

1)sed对字符的处理`

p显示
d删除
a添加
c替换
w写入
i插入

准备文件筛选文件

p模式(按照要求显示行)

在这里插入图片描述

cat的相关命令:

查看fstab文件不显示行号

查看fstab不显示空行

在这里插入图片描述

查看文件显示空行

在这里插入图片描述

显示第5行并且原来文件也显示(所以两行)

在这里插入图片描述

-n只显示模式空间的内容,不显示原来的,所以只显示第五行

在这里插入图片描述

显示第三到五行

在这里插入图片描述

显示第三行和第五行

在这里插入图片描述

sed -n '/\:/p' fstab			显示含有":"的行
sed -n '/UUID$/p' fstab			显示以UUID结尾的行
sed -n '/^UUID/p' fstab			显示以UUID开头的行
sed -n '2,6p' fstab				显示第二到六行
sed -n '2,6!p' fstab			显示除过第二到六行的信息

显示包括#的行

在这里插入图片描述

显示不包括#的行

在这里插入图片描述

显示空行和不显示空行

在这里插入图片描述

两者结合

在这里插入图片描述
注意
-n参数的区别:不加内容显示两次,加了显示一次
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

d模式(按照要求删除行)

sed '/^#/d' fstab 		除了以“#”开头的都显示

在这里插入图片描述

sed '/4$/d' fstab 		除了以“4”结尾的都显示

在这里插入图片描述

sed '1,4d' fstab		除了1至4行都显示

在这里插入图片描述

sed '/^$/d' fstab 		不显示空行

在这里插入图片描述

sed '1d;4d' fstab		除了第1行和第4行都显示

在这里插入图片描述

sed '/^UUID/!d' fstab		除了不是以“UUID”开头的都显示(显示以UUID开头的)

在这里插入图片描述

sed行编辑器的其他命令

sed '/^UUID/a'\hello' sed  fstab		在以“UUID”开头的行的后面一行添加"hello"

在这里插入图片描述
sed '/^UUID/a\hello sed\nwestos' fstab 在以“UUID”开头的行的后面一行添加"hello",然后在下一行添加"westos"(\n为换行符

在这里插入图片描述

sed '/^UUID/i'\hello' sed  fstab		在以“UUID”开头的行的前面一行添加"hello"

sed '/^UUID/a\hello sed\nwestos'  fstab 	在以“UUID”开头的行的前面一行添加"hello",然后再添加一行"westos"

在这里插入图片描述
在这里插入图片描述

sed '/^UUID/i'\hello' sed  fstab		在以“UUID”开头的行的前面一行添加"hello"





sed '/^UUID/w hahaha' fstab 			将fstab以“UUID”开头的行添加到文件hahaha中

在这里插入图片描述
在这里插入图片描述

sed -n '/^UUID/w haha' fstab 			将fstab以“UUID”开头的行添加到文件haha中,并且不显示

在这里插入图片描述

sed '6r /mnt/lee' fstab 			将fstab第6行添加到文件lee中
sed '/^UUID/c\hello sed\nwestos'  fstab 	将fstab以“UUID”开头的行替换为"hell sed",并且在下一行添加"westos"

在这里插入图片描述

sed '/^UUID/=' fstab				在以“UUID”开头的行前面一行添加行号

在这里插入图片描述

sed -n -e '/^UUID/p' -e '/^UUID/=' fstab 	显示以“UUID”开头的行并在后面面一行添加行号

在这里插入图片描述

sed -e 's/sbin/lee/g;s/nologin/#####/' passwd 	将passwd中的"sbin"替换为"lee",并且把"nologin"替换为"#####"

在这里插入图片描述

sed 's/^\//#/' fstab				将fstab中以“\”开头的“\”替换为“#”

在这里插入图片描述

sed 's@^/@#@g' fstab 				将fstab中以“\”开头的“\”替换为“#”

在这里插入图片描述

sed 's/\//#/g' fstab 				将fstab中“/”替换为#

在这里插入图片描述

三、报告生成器(awk)

awk处理机制:awk会逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行做一些总结性质的工作,然后将结果展现给用户
在命令格式上分别体现如下 :
BEGIN{}:读入第一行文本之前执行,一般用来初始化操作
{}:逐行处理,逐行读入文本执行相应的处理,是最常见的编辑指令
END{}:处理完最后一行文本之后执行 , 一般用来输出处理
AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一
这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识
awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk,用命令可以查看正在应用的awk的来源(ls -l /bin/awk

基本用法一
准备筛选文件/etc/passwd

打印passwd文件中以:分隔符的第一列

在这里插入图片描述

 打印第一列和第二列不出现分隔符

在这里插入图片描述

 打印第二lie

在这里插入图片描述

打印第二列并且在最前面加上linux

在这里插入图片描述

 awk '{print FILENAME}' passwd 			文件passwd中信息全部显示为文件名

在这里插入图片描述

awk '{print NR}' passwd 			显示文件passwd中的行号,但不显示内容

在这里插入图片描述

awk -F : '{print NF}' passwd 			显示文件passwd中的以":"为分隔符的每行的列数

在这里插入图片描述

awk 'BEGIN{n=0}/bash$/{n++}END{print n}' /etc/passwd	显示文件passwd中的以bash结尾的信息个数

在这里插入图片描述

awk -F : 'BEGIN{print "NAME"}{print $1}END{print "END"}' passwd	显示文件passwd中的第一列并且在第一行显示"NAME"在第最后一行显示"END"

在这里插入图片描述

awk '/bash$/{print}' /etc/passwd 		显示文件passwd中的以"bash"结尾的信息

在这里插入图片描述

awk '/^r/{print}' passwd 			显示文件passwd中的以“r”结尾的

在这里插入图片描述

awk -F : '$6~/\<bin/{print}' passwd		显示文件passwd中的第六列是以“bin”开头的信息

在这里插入图片描述

awk -F : '$6!~/\<bin/{print}' passwd		显示文件passwd中的除过第六列是以“bin”开头的信息的其他信息

在这里插入图片描述

设置编号在前:打印第一列

在这里插入图片描述

并打印行数

在这里插入图片描述

打印列数

在这里插入图片描述

打印第三行第一列

在这里插入图片描述

打印4-6行

在这里插入图片描述

打印4和6行

在这里插入图片描述

打印以R开头和bash结尾的

在这里插入图片描述

awk的应用

抓取主机ip
步骤如下:
在这里插入图片描述
抓取如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值