重点!!shell之正则表达式及sort、uniq、tr文本编辑器

正则表达式概述

基础正则表达式是常用正则表达式最基础的部分。在 Linux 系统中常见的文件处理工具中 grep 与 sed 支持基础正则表达式,而 egrep 与 awk 支持扩展正则表达式。

常用元字符:

常用元字符 作用
\ 转义字符,如、\!、\n等
^ 匹配输入字符串的开始位置。除非在方括号表达式中使用,表示不包含该字符集合。
$ 匹配输入字符串的结尾位置。
. 匹配除“\r\n”之外的任何单个字符
* 匹配前面的子表达式零次或多次。要匹配“*”字符,请使用“\*”
[] 字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”
[^] 赋值字符集合。匹配未包含的一个任意字符。例如,“[^abc]”可以匹配“plain”中任何一个字母
[n1-n2] 字符范围。匹配指定范围内的任意一个字符。例如,“[a-z]”可以匹配“a”到“z”范围<>内的任意一个小写字母字符。
注意:只有连字符(-)在字符组内部,并且出现在两个字符之间时,才能表示字符的范围;如果出现在字符组的开头,则只能表示连字符本身
{n} n 是一个非负整数,匹配确定的 n 次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的“oo”
{n,} n 是一个非负整数,至少匹配 n 次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”
{n,m} m 和 n 均为非负整数,其中 n<=m,最少匹配 n 次且最多匹配m 次

扩展正则表达式:

扩展正则表达式 作用 示例
+ 重复一个或者一个以上的前一个字符 执行“egrep -n 'wo+d' test.txt”命令,即可查询"wood" "woood"等字符串
零个或者一个的前一个字符 执行“egrep -n 'bes?t' test.txt”命令,即可查询“bet”“best”这两个字符串
| 使用或者(or)的方式找出多个字符 “egrep -n 't(a|e)st' test.txt”。“tast”与“test”因为这两个单词的“t”与“st”是重复的,所以将“a”与“e” 列于“()”符号当中,并以“|”分隔,即可查询"tast"或者"test"字符串
() 查找“组”字符串 执行“egrep -n 'of|is|on' test.txt”命令即可查询"of"或者"if"或者"on"字符串
()+ 辨别多个重复的组 “egrep -n 'A(xyz)+C' test.txt”。该命令是查询开头的"A"结尾是"C",中间有一个以上的"xyz"字符串的意思

文本编辑器

sort 工具

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

格式

sort [选项] 参数

常用选项

常用选项 含义
-f 忽略大小写
-b 忽略每行前面的空格
-M 按照月份进行排序
-n 按照数字进行排序
-r 反向排序
-u 等同于 uniq,表示相同的数据仅显示一行
-t 指定分隔符,默认使用[Tab]键分隔
-o <输出文件> 将排序后的结果转存至指定文件
-k 指定排序区域

示例

[root@localhost ~]# cat test.txt  //创建一个测试文件
a:1:b:c
d:2:e:f
g:4:h:i
j:3:k:l
m:9:n:o
p:5:q:r
s:8:t:u
v:7:w:x
y:6:z:z
[root@localhost ~]# sort test.txt  //不加选项内容默认以首字母或数字进行排序
a:1:b:c   
d:2:e:f
g:4:h:i
j:3:k:l
m:9:n:o
p:5:q:r
s:8:t:u
v:7:w:x
y:6:z:z

[root@localhost ~]# sort -t ':' -rk 3 test.txt   //以“:”为分隔符的第三个字段来反向排序(降序)
y:6:z:z
v:7:w:x
s:8:t:u
p:5:q:r
m:9:n:o
j:3:k:l
g:4:h:i
d:2:e:f
a:1:b:c

[root@localhost ~]# sort -t ':' -k 3 test.txt -o user.txt 
                  //以“:”为分隔符的第三字段进行排序,并将排序后的内容输出到user.txt文件中
[root@localhost ~]# cat user.txt 
a:1:b:c
d:2:e:f
g:4:h:i
j:3:k:l
m:9:n:o
p:5:q:r
s:8:t:u
v:7:w:x
y:6:z:z

uniq 工具

Uniq 工具在 Linux 系统中通常与 sort 命令结合使用,用于报告或者忽略文件中的重复行。

格式

uniq [选项] 参数

常用选项

常用选项 含义
-c 进行计数;
-d 仅显示重复行;
-u 仅显示出现一次的行。

示例

测试文件内容

[root@localhost ~]# cat test.txt   \\测试文件
a:1:b:c
d:2:e:f
d:2:e:f
d:2:e:f
d:2:e:f
d:2:e:f
d:2:e:f
d:2:e:f
g:4:h:i
j:3:k:l
j:3:k:l
j:3:k:l
j:3:k:l
j:3:k:l
m:9:n:o
p:5:q:r
s:8:t:u
v:7:w:x
y:6:z:z

[root@localhost ~]# uniq test.txt   //重复的内容被过滤,注意只能过滤连续重复的行。
a:1:b:c
d:2:e:f
g:4:h:i
j:3:k:l
m:9:n:o
p:5:q:r
s:8:t:u
v:7:w:x
y:6:z:z

[root@localhost ~]# uniq test.txt |sort -t : -k 2 //与sort命令结合使用,过滤后排序
a:1:b:c
d:2:e:f
j:3:k:l
g:4:h:i
p:5:q:r
y:6:z:z
v:7:w:x
s:8:t:u
m:9:n:o

tr工具

tr 命令常用来对来自标准输入的字符进行替换、压缩和删除。可以将一组字符替换之后变成另一组字符,经常用来编写优美的单行命令,作用很强大。

格式

tr [选项] [参数]

常用选项

选项 含义
-c 保留字符集1的字符,其他的字符用字符集2替换
-d 删除所有属于第一字符集的字符
-s 将重复出现的字符串压缩为一个字符串;用字符集2替换字符集1
-t 字符集2替换字符集1,不加选项同结果。

示例

[root@localhost ~]# cat test.txt  //测试文件内容
a:1:b:c
g:4:h:i
j:3:k:l
m:9:n:o
p:5:q:r
s:8:t:u
v:7:w:x
y:6:z:z
[root@localhost ~]# cat test.txt |tr [a-z] 3 //tr命令将字符集1中的字母全替换成字符集2中的数字3
3:1:3:3
3:4:3:3
3:3:3:3
3:9:3:3
3:5:3:3
3:8:3:3
3:7:3:3
3:6:3:3

[root@localhost ~]# cat test.txt 
iiiiii aaaaaaaaaaaaaam gggggggggggoing to school
[root@localhost ~]# cat test.txt |tr -s 'i a g'  //将重复的字符串压缩
i am going to school

[root@localhost ~]# cat test.txt 
thios ios moy caoot
[root@localhost ~]# cat test.txt |tr -d 'o' //删除字符集1的内容
this is my cat

[root@localhost ~]# cat test.txt 
123 123 123 123 123
[root@localhost ~]# cat test.txt |tr -c '2 ' '4' //除了2和空格,全部替换成4(包括换行符\n)因此末尾会多一个4,对比下一例
424 424 424 424 4244[root@localhost ~]# 
[root@localhost ~]# cat test.txt |tr -c '2 \n' '4' 
424 424 424 424 424

猜你喜欢

转载自blog.csdn.net/CN_LiTianpeng/article/details/108183358