目录
1.3 基础正则表达式(支持的工具:grep、egrep、sed、awk)
一、正则表达式(规则表达式)
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'
实例一:
实例二: