shell编程之正则表达式与文本处理器

目录

一、正则表达式

1.含义

2.定义

3.作用

4.grep

案例

二、基础正则表达式(BRE)

1.定义

2.常见元字符

三、扩展正则表达式(ERE)

1.定义

2.扩展元字符

四、文件处理器

1.cut(列截取工具)

使用说明

选项及其功能

案例

2.sort 

语法

案例

3.uniq

4.tr

常用选项

案例


一、正则表达式

1.含义

正则表达式,又称为规则表达式。在代码中常简写为redex、regexp或RE,计算机科学的一个概念。正则表达式通常用来检索、替换那些符合某个模式(规则)的文本。

正则表达式不只有一种,而且Linux中不同的程序可能会使用不同的正则表达式,如:

工具:grep  sed  awk egrep 

2.定义

  • 正则表达式,又称正规表达式、常规表达式
  • 使用字符串来描述、匹配一系列符合某个规则的字符串
  • 正则表达式组成:普通字符(大小写字母、数字、标点符号及一些其他符号);                    元字符(在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。)

3.作用

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

4.grep

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

选项功能
-E

开启拓展的正则表达式

-c计算找到 '搜寻字符串' 的次数
-i忽略大小写的不同,所以大小写视为相同
-o只显示被模式匹配到的字符串
-v

反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!

(反向查找,输出与查找条件不相符的行)

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

-n输出行号

案例

[root@localhost ~]# grep -c root /etc/passwd     

//统计root字符总行数;或cat /etc/passwd | grep root

 [root@localhost ~]# grep -i "the" ceshi.txt

//不区分大小写查找the所有的行

 [root@localhost ~]# grep -v root /etc/passwd

//将/etc/passwd中没有出现root的行显示出来

[root@localhost ~]# cat ceshi.txt | grep -v '^$' > new.txt
//将非空行写入到new.txt文件中

 [root@localhost ~]# ifconfig ens33 | grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+" | head -1

//过滤出IP

二、基础正则表达式(BRE)

1.定义

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

2.常见元字符

  • \转义字符,\!、\n等
  • ^匹配字符串开始的位置(^a、^the、^#)
  • $匹配字符串结束的位置(word$)
  • .匹配除\n之外的任意的一个字符(go.d、g..d)
  • *:匹配前面子表达式0次或者多次(doo*d、go.*d)
  • [list]:匹配list列表中的一个字符(go[ola]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)

注意 egrep, awk使用{n}、{n,}、{n,m}匹配时“{}"前不用加“\”

   egrep -E -n 'wo{2}d' test.txt   -E用于显示文件中符合条件的字符
   egrep -E -n 'wo{2,3}d' test.txt

三、扩展正则表达式(ERE)

1.定义

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

2.扩展元字符

选项功能
+

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

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

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

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

()

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

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

|

以或的方式匹配字条穿

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

四、文件处理器

1.cut(列截取工具)

使用说明

cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。

如果不能指定File参数,cut命令将读取标准输入。必须指定-b、-c、或 -f标志之一。

选项及其功能

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

案例

[root@localhost ~]# cat /etc/passwd | cut -d ':' -f 1

 [root@localhost ~]# cat /etc/passwd | cut -d ':' -f 3

 

 [root@localhost ~]# cat /etc/passwd | cut -d ':' -f1,3

 

 [root@localhost ~]# who | cut -b 4

[root@localhost ~]# who | cut -b 1

2.sort 

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

语法

 sort [选项] 参数

选项功能
-t指定分隔符,默认使用[Tab]键或空格分隔
-k指定排序区域,哪个区间排序
-n按照数字进行排序,默认是以文字形式排序
-u等同于uniq,表示相同的数据仅显示一行,注意:如果行尾有空格去重就不成功
-r反向排序,默认是升序,-r就是降序
-o将排序后的结果转存至指定文件

案例

 [root@localhost ~]# sort ceshi.txt

不加任何选项默认按第一列升序,字母的话就是从a到z依次排列。

[root@localhost opt]# sort -n -t: -k3 /etc/passwd

以冒号为分隔符,以数字大小对第三列对第三列排序(升序)

[root@localhost opt]# sort -nr -t: -k3 /etc/passwd 

以冒号为分隔符,以数字大小对第三列对第三列排序(降序)

3.uniq

主要用于去除连续的重复行。

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

选项功能
-c对重复的行进行计数
-d仅显示重复行
-u仅显示出现一次的行

[root@localhost ~]# cat 4.txt | sort | uniq -c
先排序,再对重复行进行排序

[root@localhost ~]# cat 4.txt | sort | uniq -d

仅显示重复的行

[root@localhost ~]# cat 4.txt | sort | uniq -u

仅显示不重复的行

[root@localhost ~]# cat 4.txt | sort | uniq

去掉重复的部分

4.tr

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

格式:tr [选项]… SET1 [SET2]

常用选项

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

案例

[root@localhost ~]# cat 4.txt | tr 'a-z' 'A-Z'
将文本内容中所有小写字母改为大写

 

 [root@localhost ~]# cat 4.txt | tr 'cat' 'CAT'

一一替换        c对应C         a对应A      t对应T

 

[root@localhost ~]# cat 4.txt | tr -d 'd' 

删除所有d

[root@localhost ~]# cat 4.txt | tr -d 'dog' 

删除所有d,o,g这三个字母

[root@localhost ~]# cat 4.txt | tr -d '\n'

删除换行

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值