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 " ' " '/'

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

相关推荐
藓类少女33 分钟前
正则表达式
数据库·python·mysql·正则表达式
@福者33 分钟前
鸿蒙 - 判断手机号、身份证(正则表达式)
正则表达式·鸿蒙判断手机号·鸿蒙判断身份证号
Book_熬夜!1 天前
Python基础(九)——正则表达式
python·正则表达式·php
艾伦~耶格尔4 天前
Java 正则表达式详解
java·开发语言·学习·正则表达式
不会写算法的小王5 天前
正则表达式
正则表达式
kuiini5 天前
python学习-08【正则表达式】
python·学习·正则表达式
敲代码不忘补水5 天前
Python 正则表达式详解:从基础匹配到高级应用
java·python·正则表达式
wclass-zhengge5 天前
MySQL篇(高级字符串函数/正则表达式)(持续更新迭代)
android·mysql·正则表达式
立黄昏粥可温7 天前
Python 从入门到实战17(正则表达式操作)
python·正则表达式
shyuu_9 天前
Linux 三种方式查看和设置主机名
linux·运维·服务器·正则表达式·云计算·运维开发