Bootstrap

正则表达式与文本处理器

目录

一、正则表达式(规则表达式)

1.1 正则表达式概述

1.2 grep工具

1.3 基础正则表达式(支持的工具:grep、egrep、sed、awk)

1.4 扩展正则表达式(支持的工具:egrep、awk)

注:区别总结发现(基础/扩展正则)

1.5 元字符操作的案列及总结

1.5.1 查找特定字符

1.5.2 利用中括号“[]”来查找集合字符

1.5.3 查找行首“^”与行尾字符“$”

1.5.4 查找任意一个字符“.”与重复字符“*”

1.5.5 查找连续字符范围“{}”

二、命令小工具(cut、sort、uniq、tr)

2.1 cut(列截取工具)

2.2 sort(排序工具)

2.3 uniq(去重工具)

2.4 tr(替换、删除、去重工具)


一、正则表达式(规则表达式)

1.1 正则表达式概述

  • 正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
  • 正则表达式不只有一种,而且 LINUX 中不同的程序可能会使用不同的正则表达式,如:工具:grep sed awk egrep*****
  • 正则表达式---通常用于判断语句中,用来检查某一字符串是否满足某一格式
  • 正则表达式是由普通字符与元字符组成
  • 普通字符包括大小写字母、数字、标点符号及一些其他符号
  • 元字符是指在正则表达式中具有特殊意义的专用字符可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式

LINUX 中常用的有两种正则表达式引擎
基础正则表达式:BRE
扩展正则表达式:ERE

1.2 grep工具

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

参数及含义:

-E开启扩展(Extend)的正则表达式:grep -E=egrep
-c计算找到 '搜寻字符串' 的次数
-i忽略大小写的不同,所以大小写视为相同
-o只显示被模式匹配到的字符串
-v

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

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

--color=auto可以将找到的关键词部分加上颜色的显示喔!
-n顺便输出行号

案例:

1、-c

2、-i

3、-v

4、-o

5、-n

1.3 基础正则表达式(支持的工具:grep、egrep、sed、awk)

\

转义符:将特殊字符进行转义,忽略其特殊意义a\.b匹配a.b

但不能匹配ajb,.被转义为特殊意义\\\\

^匹配行首:^则是匹配字符串的开始^tux匹配以tux开头的行^^^^
$匹配行尾:$则是匹配字符串的结尾tux$匹配以tux结尾的行$$$$ 
.匹配除换行符\r\n之外的任意单个字符
\+匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
[list]匹配list列表中的一个字符 例: go[ola]d,[abc]、[a-z]、[a-z0-9]
[^list]匹配任意不在list列表中的一个字符 例: [^a-z]、[^0-9]、[^A-Z0-9]
*匹配前面子表达式0次或者多次例:goo*d、go.*d
\{n\}匹配前面的子表达式n次:例:go\{2\}d、'[O-9]\{2\}'匹配两位数字
\{n,\}匹配前面的子表达式不少于n次,例: go\{2,\}d、' [0-9]\{2,\}'匹配两位及两位以上数宁
\{n,m\}匹配前面的子表达式n到m次,例: go\{2,3\)d、'[0-9]\{2,3\}'匹配两位到三位数字

注意:对于支持扩展正则表达式的工具(egrep、awk、grep -e):

使用{n}、{n,}、{n,m}匹配时“{}”前不用加“\”

定位符
^:匹配输入字符串开始的位置
$:匹配输入字符串结尾的位置

非打印字符
\n:匹配一个换行符
\r:匹配一个回车符
\t:匹配一个制表符

1.4 扩展正则表达式(支持的工具:egrep、awk)

概述:

目的:简化整个指令,需要使用范围更广的扩展正则表达式

例如,使用基础正则表达式查询除文件中空白行与行首为“#”之外的行(通常用于查看生效的配置文件),执行“grep -v‘^$’test.txt | grep -v‘^#’”即可实现。这里需要使用管道命令来搜索两次。如果使用扩展正则表达式, 可以简化为“egrep-v‘^$|^#’test.txt”,其中,单引号内的管道符号表示或者

常见的扩展正则表达式的元字符主要包括以下几个
1、+:重复一个或者一个以上的前一个字符

2、?:零个或者一个的前一个字符

3、|:零个或者一个的前一个字符

4、():查找“组”字符串

5、()+:辨别多个重复的组

注:区别总结发现(基础/扩展正则)

[]多用于基础正则

()多用于扩展正则

1.5 元字符操作的案列及总结

1.5.1 查找特定字符

1.5.2 利用中括号“[]”来查找集合字符

查找“shirt”与“short”这两个字符串时,可以发现这两个字符串均包含“sh”与“rt”。

此时执行以下命令即可同时查找到“shirt”与“short”这两个字符串,其中“[]”中无论有几个字符, 都仅代表一个字符,也就是说“[io]”表示匹配“i”或者“o”。

若要查找包含重复单个字符“oo”

若查找“oo”前面不是“w”的字符串,只需要通过集合字符的反向选择“[^]”来实现该目的。

例如执行“grep -n‘[^w]oo’test.txt”命令表示在 test.txt 文本中查找“oo”前面不是“w”的字符串。

1.5.3 查找行首“^”与行尾字符“$”

基础正则表达式包含两个定位元字符:“^”(行首)与“$”(行尾)

在上面的示例中, 查询“the”字符串时出现了很多包含“the”的行,如果想要查询以“the”字符串为行首的行,则可以通过“^”元字符来实现

“^”符号在元字符集合“[]”符号内外的作用是不一样的,在“[]”符号内表示反向选择,在“[]” 符号外则代表定位行首

1.5.4 查找任意一个字符“.”与重复字符“*”

在正则表达式中小数点(.)也是一个元字符,代表任意一个字符

“grep -n 'o*' test.txt”命令会将文本中所有的内容都输出打印

如果是“oo*”,则第一个 o 必须存在, 第二个 o 则是零个或多个 o,所以凡是包含 o、oo、ooo、ooo,等的资料都符合标准。同理,若查询包含至少两个 o 以上的字符串,则执行“grep -n 'ooo*' test.txt”命令即可。

o*

oo*

ooo*

1.5.5 查找连续字符范围“{}”

① 查询两个 o 的字符

② 查询以 w 开头以 d 结尾,中间包含 2~5 个 o 的字符串

③ 查询以 w 开头以 d 结尾,中间包含 2 个或 2 个以上 o 的字符串

二、命令小工具(cut、sort、uniq、tr)

2.1 cut(列截取工具)

用法:

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

如果不指定 File 参数,cut 命令将读取标准输入

参数选项

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

-d:

-b:(字节)

-c:(中文)

2.2 sort(排序工具)

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

语法:

sort [选项] 参数

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

sort:不加参数、由上至下(a-z)

-n、-k、-t

-o:

-r:

-u:

2.3 uniq(去重工具)

用法:

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

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

语法
uniq [选项] 参数

常用选项

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

-c:

-d:

-u:

去重:

实例一:查看登陆用户

实例二:查看登陆过系统的用户

2.4 tr(替换、删除、去重工具)

用法:

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

语法:
tr [选项]… SET1 [SET2]
从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。

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

tr 无参数 ()():替换

将大写替换为小写:替换是一一对应的字母的替换

把替换的字符用单引号引起来,包括特殊字符

-d:删除

-s:去重

注意:删除空行 tr -s '\n'

实例一:

实例二:

;