Shell编程之正则表达式与文本处理器(一)

目录

正则表达式定义

正则表达式组成

普通字符

元字符

基础正则表达式元字符

常见元字符(续)

拓展正则表达式元字符

理论小结

LINUX中常用的有两种正则表达式引擎

GREP

 示例:

过滤出有‘the’的句子

过滤出有‘in’的句子

显示以sh开头,t结尾,中间或是i或是r的单词所在的行

显示单词中间有两个o的单词所在的行

显示单词开头大写中间有两个o的单词所在的行

显示含有数字所在的行

显示开头是数字的行

显示开头是‘the’的行

显示以小写字母开头的行

以数字和符号开头的行

显示以‘.’结尾的行

显示空行

显示以w开头d结尾,中间有任意两个字符的单词的行

显示有o的行

显示以w开头d结尾,中间有至少两个o的行

显示以w开头d结尾,中间有至少一个o的行

查找两个o以上的字符串所在的行

查找wo开头,两个到五个o的字符串

查找wo开头,三个o到五个o的字符串

查找w开头,d结尾,且含有两个o的字符串

cut、 sort、 uniq、tr

cut:列截取工具

使用说明:

选项

 示例

查找/etc/passwd并以冒号作为分隔符并打印第七列

第二种方法查找/etc/passwd并以冒号作为分隔符并打印第三列

查找/etc/passwd并以冒号作为分隔符并打印第三列和第七列

截取字节

sort

语法:

常用选项

案例

以首字母排序

从第4行开始,以冒号作为分隔符,按照数字进行排序

按数字逆序进行排列

将结果输出到passwd.bak文件

去掉文件中重复的内容

uniq

用法:

语法

常用选项

案例

显示重复行的次数(不连续的不计入统计)

先排序再统计重复行数

显示重复的行

显示只出现过一次的行

去掉重复的行

去掉重复的行(第二种方法)

 以空格作为分隔符,打印第一列

 多功能组合​

tr (替换)

语法:

用法:

常用选项

案例(预览模式)

用大写代替小写

将个别小写字母替换成小鞋字母

将小写字母‘a’替换为空格

以上均为预览模式

多个字母替换

删除单个字母‘a’

删除多个字母‘apple’

删除换行

删除重复的字母

总结


正则表达式定义

(1)正则表达式,又称正规表达式、常规表达式

(2)使用字符串来描述、匹配一系列符合某个规则的字符串

正则表达式组成

普通字符

大小写字母、数字、标点符号及一些其他符号

元字符

在正则表达式中具有特殊意义的专用字符

基础正则表达式元字符

基础正则表达式是常用的正则表达式部分

除了普通字符外,常见到以下元字符

\:转义字符,\!、\n等

^:匹配字符串开始的位置

例:^a、^the、^#

$:匹配字符串结束的位置

例:word$

.:匹配除\n之外的任意一个字符

例:go.d、g..d

常见元字符(续)

*:匹配前面子表达式0次或者多次

例:goo*d 、go.*d

[list]:匹配list列表中的一个字符

例:go[old]d,[abc],[a-z],[a-z0-9]

[^list]:匹配任意不在list列表中的一个字符

例:[^a-z],[^0-9],[^A-Z0-9]

\{n,m\}:匹配前面的子表达式n到m次,有\{n\}、\{n,\}、\{n,m\}三种格式

例:go\{2\}d、go\{2,3\}d、go\{2,\}d、

拓展正则表达式元字符

扩展正则表达式是对基础正则表达式的扩充深化

扩展元字符

+:匹配前面子表达式1次以上

例:go+d,将匹配至少一个o

?:匹配前面子表达式0次或者1次

例:go?d,将匹配gd或god

():将括号中的字符串作为一个整体

例:(xyz)+,将匹配xyz整体1次以上,如xyzxyz

|:以或的方式匹配字条串

例1:good|food,将匹配good或者food

例2:g(oo|la)d,将匹配good或者glad

理论小结

正则表达式,又称规则表达式。(英语:Regular Expression),在代码中常简写为 regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式不只有一种,而且LINUX中不同的程序可能会使用不同的正则表达式,如:

工具: grep sed awk egrep

正则表达式---通常用于判断语句中,用来检查某一字符串是否满足某一格式

正则表达式是由普通字符与元字符组成

普通字符包括大小写字母、数字、标点符号及一些其他符号

元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式

LINUX中常用的有两种正则表达式引擎

基础正则表达式:BRE

扩展正则表达式:ERE

GREP

grep [选项].....查找条件目标文件

-E:开启扩展(Extend)的正则表达式

-c:计算找到'搜寻字符串·的次数

-i:忽略大小写的不同,所以大小写视为相同

-o:只显示被模式匹配到的字符串

-v:反向查找,输出与查找条件不相符的行

--color=auto :可以将找到的关键词部分加上颜色的显示喔!

-n:顺便输出行号


grep -c root /etc/passwd           //统计root字符总行数;或cat /etc/passwd l grep root
grep  -i "the"web.sh          //不区分大小写查找the所有的行
grep -v root /etc/passwd           //将/etc/passwd,将没有出现root的行取出来
cat web.sh lgrep -v '^$' >test.txt          //将非空行写入到test.txt文件
ifconfig ens33 | grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+" head -1       //过滤出IP

 示例:

备份文件

查看网卡

过滤出有‘the’的句子

过滤出有‘in’的句子

显示以sh开头,t结尾,中间或是i或是r的单词所在的行

先创建一个文件,并输入一下内容(无意义,只是单纯为了方便筛选进行对比)

he was short and fat.
He was wearing a blue polo shirt with black pants. 
The home of Football on BBC Sport online.
the tongue is boneless but it breaks bones.12! 
google is the best tools for search keyword.
The year ahead will test our political establishment to the limit.
PI=3.141592653589793238462643383249901429
a wood cross!
Actions speak louder than words


#woood #
#woooooood 
# AxyzxyzxyzxyzC
I bet this place is really spooky late at night! 
Misfortunes never come alone/single.

显示单词中间有两个o的单词所在的行

显示单词开头大写中间有两个o的单词所在的行

显示含有数字所在的行

显示开头是数字的行

显示开头是‘the’的行

显示以小写字母开头的行

以数字和符号开头的行

显示以‘.’结尾的行

显示空行

显示以w开头d结尾,中间有任意两个字符的单词的行

显示有o的行

显示以w开头d结尾,中间有至少两个o的行

显示以w开头d结尾,中间有至少一个o的行

查找两个o以上的字符串所在的行

查找wo开头,两个到五个o的字符串

查找wo开头,三个o到五个o的字符串

查找w开头,d结尾,且含有两个o的字符串

cut、 sort、 uniq、tr

cut:列截取工具

使用说明:

cut命令从文件
的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定File参数,cut命令将读取标准输入。必须指定-b、-c或-f 标志之一

选项

-b:按字节截取
-c:按字符截取,工常用于中文
-d:指定以什么为分隔符截取,默认为制表符15-f:通常和-d一起

 示例

查找/etc/passwd并以冒号作为分隔符并打印第七列

第二种方法查找/etc/passwd并以冒号作为分隔符并打印第三列

查找/etc/passwd并以冒号作为分隔符并打印第三列和第七列

截取字节

sort

是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序。例如数据和字符的排序

语法:

sort [选项] 参数

常用选项

-t:指定分隔符,默认使用[ Tab]吧键或空格分隔

-k:指定排序区域,哪个区间排序

-n:按照数字进行排序,默认是以文字形式排序

-u:等同于uniq,表示相同的数据仅显示一行,注意:如果行尾有空格去重就不成功

-r:反向排序,默认是升序,-r就是|降序

-o:将排序后的结果转存至指定文件

sort passwd.txt              //不加任何选项默认按第一列升序,字母的话就是从a到z由上

sort -n -t: -k3 passwd.txt            //以冒号为分隔符,以数字大小对第三列排序(升序)

sort -nr -t: -k3 passwd.txt         //以冒号为分隔符,以数字大小对第三列排序(降序)

sort -nr -t: -k3 passwd.txt -o passwd.bak      //将输结果不在屏幕上输出而是输出到passwd.bak文件

sort -u passwd.txt          //去掉文件中重复的行(重复的行可以是不连续的)

zhangsan

zhangsan

zhangsan

gggggg

lisi

案例

准备工作:备份文件

以首字母排序

从第4行开始,以冒号作为分隔符,按照数字进行排序

同理

按数字逆序进行排列

将结果输出到passwd.bak文件

去掉文件中重复的内容

uniq

用法:

主要用于去除连续的重复行
注意:是连续的行,所以通常和sort结合使用先排序使之变成连续的行再执行去重操作,否则不连续的重复行他不能去重

语法

uniq [选项] 参数

常用选项

-c:对重复的行进行计数;-d:仅显示重复行;
-u:仅显示出现一次的行
 

案例

创建文件夹,并输入以下内容

显示重复行的次数(不连续的不计入统计)

先排序再统计重复行数

显示重复的行

显示只出现过一次的行

去掉重复的行

去掉重复的行(第二种方法)

 以空格作为分隔符,打印第一列

 多功能组合

tr (替换)

语法:

tr [选项]....SET1 [SET2]

用法:

它可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。

常用选项

-d:删除字符
-s:删除所有重复出现的字符,只保留第一个

案例(预览模式)

用大写代替小写

将个别小写字母替换成小鞋字母

将小写字母‘a’替换为空格

以上均为预览模式

多个字母替换

删除单个字母‘a’

删除多个字母‘apple’

删除换行

删除重复的字母

总结

1.基础正则表达式元字符的用法

2.扩展正则表达式元字符的用法

3.grep命令的使用方法

4.文本处理器的常用方法(cut、sort、uniq、tr)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值