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

目录

一、正则表达式

1.引言--什么是正则表达式

1.1正则表达式的功能

1.2主要命令--grep

2.基础正则表达式(BRE)

2.1特殊字符

2.2定位符

2.3非打印字符

3.扩展正则表达式(ERE)

4.元字符操作的案列

二、命令小工具

1.cut:列截取工具

2.sort排序

3.uniq去重

4.tr删除


一、正则表达式

1.引言--什么是正则表达式

正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本

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

工具:grep sed awk egrep

1.1正则表达式的功能

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

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

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

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

1.2主要命令--grep

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

|--------------|-------------------------------------------------|
| 常用选项 | 功能 |
| -E | 开启扩展(Extend)的正则表达式 |
| -c | 计算找到 '搜寻字符串' 的次数 |
| -i | 忽略大小写的不同,所以大小写视为相同 |
| -o | 只显示被模式匹配到的字符串 |
| -v | 反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!(反向查找,输出与查找条件不相符的行) |
| --color=auto | 可以将找到的关键词部分加上颜色的显示 |
| -n | 顺便输出行号 |

2.基础正则表达式(BRE)

基础正则表达式常见元字符:(支持的工具:grep、egrep、sed、awk)

2.1特殊字符

|------------|-----------------------|------------------------------------------------------|
| 特殊字符 | 描述 | 示例及解释 |
| \ | 转义符,将特殊字符进行转义,忽略其特殊意义 | a\.b匹配a.b,但不能匹配ajb,.被转义为特殊意义 |
| ^ | 匹配行首 | ^tux匹配以'tux`开头的行 |
| | 匹配行尾 | tux匹配以tux结尾的行 |
| . | 匹配除换行符\r\n之外的任意单个字符 | a.b匹配a和b之间任意一个字符 |
| [list] | 匹配list列表中的一个字符 | go[ola]d匹配gold、good、goad,也可以是[a-z]匹配所有小写字母 |
| [^list] | 匹配任意不在list列表中的一个字符 | [^a-z]匹配任意非小写字母的字符 |
| * | 匹配前面子表达式0次或者多次 | goo*d匹配god、good、gooooood |
| \{n\} | 匹配前面的子表达式n次 | go\{2\}d~匹配good、[0-9]\{2\} 匹配两位数字 |
| \{n,\} | 匹配前面的子表达式不少于n次 | go\{2,\}d匹配good、goood等、[0-9]\{2,\}匹配两位及两位以上数字 |
| \{n,m\} | 匹配前面的子表达式n到m次 | go\{2,3\}d匹配good、goood、[0-9]\{2,3\}`匹配两位到三位数字 |

**注:**egrep、awk使用{n}、{n, }、{n, m}匹配时"{}"前不用加"\"

2.2定位符

^ 匹配输入字符串开始的位置

$ 匹配输入字符串结尾的位置

2.3非打印字符

\n 匹配一个换行符

\r 匹配一个回车符

\t 匹配一个制表符

3.扩展正则表达式(ERE)

通常情况下会使用基础正则表达式就已经足够了,但有时为了简化整个指令,需要使用范围更广的扩展正则表达式

下面举几个例子说明:

  • 作用:重复一个或者一个以上的前一个字符

? 作用:零个或者一个的前一个字符

| 作用:使用或者(or)的方式找出多个字符

() 作用:查找"组"字符串

()+ 作用:辨别多个重复的组

4.元字符操作的案列

查找特定字符以及反向选择

利用中括号"[]"来查找集合字符以及查找包含重复单个字符

大小写字母查找"a-z"或"A-Z"以及数字查找

查找行首"^"与行尾字符"$"

"^"符号在元字符集合"[]"符号内外的作用是不一样的

查找任意一个字符"."与重复字符"*"

查找连续字符范围"{}"

二、命令小工具

1.cut:列截取工具

用法:

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

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

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

2.sort排序

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

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

3.uniq去重

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

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

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

4.tr删除

它可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符

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

cat fruit | tr " ' " '/'

如果想替换单引号则需要用双引号把单引号引起来,反斜杠转义也不行

相关推荐
壹号用户19 小时前
python学习之正则表达式
python·学习·正则表达式
xiaozaq1 天前
java 正则表达式 所有的优先级
java·开发语言·正则表达式
ColderYY1 天前
Python中的正则表达式
开发语言·python·正则表达式
李宥小哥1 天前
正则表达式详解
正则表达式
珊瑚礁的猪猪侠4 天前
正则表达式入门到精通教程(Linux实操版)
linux·人工智能·正则表达式
!win !6 天前
分享二个实用正则
javascript·正则表达式
xw56 天前
分享二个实用正则
javascript·正则表达式
刺客-Andy6 天前
Python 第二十节 正则表达式使用详解及注意事项
python·mysql·正则表达式
好好好起个名真难6 天前
正则表达式
正则表达式
坚持就完事了7 天前
正则表达式与Python的re模块
python·正则表达式