shell中的文本处理正则表达式(grep,sed,awk,linux中三剑客)

1.什么是正则表达式

正则表达式,又称为规则表达式,在代码中常简写为regex,regexp或RE,计算机科学的一个概念
正则表达式通常被用来检索,替换那些符合某个模式(规则)的文本
许多程序设计语言都支持利用正则表达式进行字符串操作,例如在Perl内建了一个功能强大的正则表达式引擎
正则表达式这个概念最初是由Unix中的工具软件,例如sed和grep普及开的
正则表达式常缩写成regex,单数由regexp,regex,复数有regexps,regexes,regexen
正则表达式是对字符串操作的一种逻辑公式,用事先定义好的特定字符,及这些特定字符的组合组成一个规则字符串
这个规则字符串用来表达对字符串的一种过滤逻辑

grep文本过滤器命令

grep的工作方式:在一个或多个文件中搜索字符串模板
如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名,搜索的结果被送到屏幕,grep可用于shell脚本,如果模板搜索成功返回0,不成功返回1,搜索文件不存在返回2,我们可以利用返回值做一些自动化的文本处理工作

grep的格式 (贪婪模式的匹配)
grep 匹配条件 处理文件
将/etc/passwd 移动到/mnt下
在这里插入图片描述
删除后面的内容
在这里插入图片描述

grep root passwd 搜索全文中的root

在这里插入图片描述

grep ^root 过滤以root开头

在这里插入图片描述

grep bash$ 过滤以bash结尾

在这里插入图片描述

grep -i root passwd 忽略大小写

在这里插入图片描述

grep -E “root | ROOT" passwd 同时匹配多个条件 相当于egrep使grep扩展,可识别扩展字符

在这里插入图片描述

grep -E "root|bash" passwd 搜索同时包含root和bash的行

在这里插入图片描述
grep属于贪婪模式的搜索和匹配,只要行中由root的出现,它就会打印匹配行,除非指定开头和结尾
在这里插入图片描述
grep不可以直接加两个条件
在这里插入图片描述
grep -E 就可以加两个条件,不加E的话就过滤两次,例:过滤root开头且bash结尾的行
在这里插入图片描述
在这里插入图片描述

grep -i root passwd -v 表示打印与匹配条件相反的行,除了root(忽略大小写)其他的行

在这里插入图片描述

cat passwd 查看passwd文件并显示行号

在这里插入图片描述

cat -b passwd | grep lp 过滤并查看含lp的行

在这里插入图片描述

cat -b passwd | grep lp -2 打印匹配行以及匹配行的上下两行

在这里插入图片描述

cat -b passwd | grep lp -A2 打印匹配行以及匹配行后两行

在这里插入图片描述

cat -b passwd | grep lp -B2 打印匹配行以及匹配行前两行

在这里插入图片描述
grep中的正则表达式
写入实验内容
在这里插入图片描述

^westos打印以westos开头的行
westos$打印以westos结尾的行
grep 'w....s'打印w和s中间包括四个字符的行

在这里插入图片描述

grep 'w....'打印w开头后面4个字符的行

在这里插入图片描述

grep '....s' 打印s结尾前面4个字符的行

在这里插入图片描述

grep ws 打印ws的行

在这里插入图片描述
grep中字符的匹配次数设定
编辑测试文件
在这里插入图片描述

*字符出现0-任意次,打印ab或者ab之间由0-多个任意字符的行

在这里插入图片描述

\?字符出现0-1次 打印b前,出现0-1次a

在这里插入图片描述

\+字符至少出现1次

在这里插入图片描述

\{n\} 字符出现n次 打印b前面a出现两次的行

在这里插入图片描述

|{m,n\} 字符最少出现m次,最多出现n次 打印b前a至少出现2次,最多出现3次的行

在这里插入图片描述

\{0,n\}字符出现至少0-n次 打印b前a至少出现0-2次的

在这里插入图片描述

\{m,\}字符出现至少m次 打印b前a至少出现过2次的行

在这里插入图片描述

(xy\)\{n\}xy 关键字出现n次 ab出现4次

在这里插入图片描述

.*关键字之间匹配任意字符 a和b之间出现0-多个字符的行

在这里插入图片描述

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

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

^ 关键字 寻找以什么开头的关键字

在这里插入图片描述

关键字 $ 寻找以什么结尾的关键字

在这里插入图片描述

\< 关键字 以root开头的两边必须是符号或者空的行

在这里插入图片描述

关键字 \> 以bash结尾两边必须是符号或者单词空格的行

在这里插入图片描述

\<关键字\>  匹配包含bash,bash两边必须是符号或者单词空格的行

在这里插入图片描述
==grep 正则表达式与扩展正则表达式

正规的grep不支持扩展正则表达式,|是用于表示或的扩展正则表达式字符,正规的grep无法识别
加上\这个字符就被转译成扩展正则表达式,就像egrep

sed行编辑器
1.sed命令的概念

sed是一项Linux指令,功能通awk类似,差别在于sed简单,对列处理的功能要差一些,awk功能复杂,对列处理的功能比较强大
sed来操作纯ASCII码的文本处理时,把当前处理的行储存在临时缓冲区,称为模式空间,可以指定仅仅处理哪些行
sed符合条件的处理,不符合条件的不处理,处理完后就把缓冲区的内容送至屏幕
接着处理下一行,这样不断重复,直到文件末尾
原来的内容是在磁盘中放着,现在用sed处理就相当于内容掉入内存的一个地方用户处理,这个处理空间就叫模式空间

sed命令格式
调用sed命令由两种形式

 sed 		[options]		'command' file
 sed		[options]	-f 	 scriptfile file

sed对字符的处理

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

p模式操作 (按要求显示行)

cp /etc/fstab .
cat -n fstab 显示空行

在这里插入图片描述

cat -n fstab | sed 5p 显示第五行并且在原来文件也显示

在这里插入图片描述> cat -n fstab | grep 3,5p 显示3-5行并且原来的文件也显示
在这里插入图片描述

cat -n fstab  | sed -n 3,5p 只显示模式空间的内容,不显示原来的文件内容

在这里插入图片描述

cat -n fstab | sed -n '3p;5p'  只显示模式空间的3,5行

在这里插入图片描述

显示包括#的行

在这里插入图片描述

显示不包括#的行

在这里插入图片描述

显示空行

在这里插入图片描述

显示非空行

在这里插入图片描述

显示非空行并且不是以#开头的行

在这里插入图片描述
d模式操作

删除#开头的行并且其余的行都显示

在这里插入图片描述

删除第五行,并显示其他的行

在这里插入图片描述

删除第三行和第五行

在这里插入图片描述

删除UUID开头的行

在这里插入图片描述
a模式操作 (按照要求添加)

在以UUID开头的行下面加入hello linux

在这里插入图片描述

在以UUID开头的行下面加入hello linux

在这里插入图片描述
== i模式操作 (按要求插入)

在第四行下面加入hello行linux行

在这里插入图片描述

在第四行位置插入hello行 linux行

在这里插入图片描述
c操作模式 (按要求改变行)

把#开头的行全部变成westos

在这里插入图片描述

把#开头的行全变成westos然后把结果插入fstab中

在这里插入图片描述
w模式操作 按要求写入行

将UUID开头的内容写入file文件

在这里插入图片描述
sed其他用法

显示以UUID开头的行是第几行,并且不输出原文

在这里插入图片描述

不但显示第几行,还显示原文

在这里插入图片描述

显示一共有多少行,且输出原文内容

在这里插入图片描述

 将test中的内容加到fstab文件中的第六行下
 vim test 

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

把test中的内容加到fstab的结尾

在这里插入图片描述

cat test > fstab 直接导入会覆盖fstab原来的内容

在这里插入图片描述

sed '$r test' fstable -i  修改fstable中的内容

在这里插入图片描述

awk报告生成器

awk处理机制:awk会逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行做一些总结性的工作,然后将结果展现给用户
在命令格式上分别体现如下:
BEGIN{}:读第一行文本前执行,一般用来初始化操作
{}:逐行处理,逐行读如文本执行相应的处理,是最常见的编辑指令
END{}:处理完最后一行文本之后执行,一般用来输出处理
awk是一个优良的文本处理工具,Linux及Unix环境中现有的最强的数据处理引擎之一
用命令可以查看正在应用的awk来源 ls -l /bin/awk

在这里插入图片描述
linux上默认适用的是gawk,其余的还有nawk。

awk的基本用法
复制/etc/passwd 到/mnt中 删除掉后面的行数,只留前面

指定分隔符,打印passwd文件以:为分隔符的第一列字符

在这里插入图片描述
打印第一列和第一列,不出现:分割符
在这里插入图片描述

打印第2列

在这里插入图片描述

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

在这里插入图片描述

在第二列后面均写上1

在这里插入图片描述

打印第二列,并且编号

在这里插入图片描述

把编号写在第一列前面

在这里插入图片描述

在第一列前面加上编号,并且在底下写入END

在这里插入图片描述

在passwd结尾输出行数

在这里插入图片描述

在passwd结尾处输入列数

在这里插入图片描述

输出包含bash行的第一个字符

在这里插入图片描述

passwd第三行

在这里插入图片描述

passwd 3456行

在这里插入图片描述

passwd4和6行

在这里插入图片描述

passwd输出文件名字,有多少行输出多少次

在这里插入图片描述

passwd输出行

在这里插入图片描述

输出a+12的值

在这里插入图片描述

输出以a-d开头的行

在这里插入图片描述

输出不是以a-d开头的行

在这里插入图片描述

输出以root开头且以bash结尾的行

在这里插入图片描述

输出以r开头或者以bash结尾的行

在这里插入图片描述

打印第六列含有bin的行

在这里插入图片描述

打印第六列不含bin的行

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值