正则表达式概述
基础正则表达式是常用正则表达式最基础的部分。在 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