1.为何正则表达式
正则表达式是通过一些特殊字符来达到【查找、删除、替换】一行或多行字符串的目的。
2.正则表达式用途
用于处理大量字符串信息的地方。比如邮件服务器
3.语系对正则表达式的影响
zh_CN.big5和C语系中,英文大小写编码顺序为:
LANG = C:0 1 2 3 ... A B C D ... Z a b c d ... z
LANG = zh_CN.big5:0 1 2 3 ... a A b B c C ... z Z
如果想选取大写字符而使用【A-Z】时,会发现LANG = C语系确实仅识别大写字符。但是big5语系会把小写b-z也同时选取出来。所以,使用正则表达式时,需要特别注意环境的语系。在兼容POSIX标准中,就使用C这个语系。
为了避免语系对大小写和数字的选取问题,可以采用一些特殊符号:
特殊符号 | 代表意义 |
---|---|
[:alnum:] | 代表英文大小写及数字 |
[:alpha:] | 代表英文大小写 |
[:blank:] | 代表空格键和TAB按键 |
[:digit:] | 代表数字 |
[:lower:] | 代表英文小写 |
[:upper:] | 代表英文大写 |
[:punct:] | 代表标点符号 |
4.基础正则表达式练习
1)查找文件中包含某个字符串的行
grep [-n] [-An1] [-Bn2] '需要查找的字符或字符串' filename
参数-n:结果中显示行号;
参数-An1:除了列出关键行外,后面n1行也同时列出;
参数-Bn2:除了列出关键行外,前面n2行也同时列出;
2)查找不含某个字符串的行
grep -vn '不需要查找的字符或字符串' filename
3)查找不区分大小写字符串的行
grep -in '需要查找的字符或字符串' filename
4)查找集合字符(比如test和taste)
grep -n 't[ea]st' filename
5)查找集合字符中不带某字符(比如oo前不带g)
grep -n '[^g]oo' filename
该命令可以不选取good字符,但仍然会选取goooooooooooood字符。
6)查找集合字符中不带小写字符
grep -n '[^a-z]oo' filename
或 grep -n '[^abcdefghijklmnopqrstuvwxyz]oo' filename
或 grep -n '[^[:lower:]]oo' filename
7)查找仅在行首出现的字符
grep -n '^需要查找的字符串' filename
8)查找行首是小写字符
grep -n '^[a-z]' filename
或 grep -n '^[[:lower:]]' filename
8)查找行首不是英文字符
grep -n '^[^[:alpha:]]' filename
9)查找仅在行尾出现的字符
grep -n '需要查找的字符串$' filename
10)查找仅在行尾出现的特殊字符(比如.或!)
grep -n '\需要查找的字符串$' filename (反斜杠后接特殊字符)
11)查找空白行
grep -n '^$' filename
12)查找某个特定单词(比如g和d之间必定存在两个未知字符)
grep -n 'g..d' filename
13)查找某个特定单词(比如含有o、oo、ooo、oooo...的单词)
grep -n 'oo*' filename
14)查找某个特定单词(比如不含o、含有o、oo、ooo、oooo...的单词)
grep -n 'o*' filename
15)查找特定单词(比如g开头,g结尾,中间可有可无字符)
grep -n 'g.*g' filename
这个命令跟 grep -n 'go*g' filename不同。
16)查找含有2个o的字符
grep -n 'o\{2\}' filename (反斜杠后接特殊字符)
17)查找gg之间含有2到5个o的字符
grep -n 'go\{2,5\}g' filename
18)查找gg之间含有2个以上o的字符
grep -n 'go\{2,\}g' filename
5.sed工具
sed是流编辑器,擅长对数据处理。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。利用sed命令可以将数据行进行替换、删除、新增、选取等特定工作。
用法:sed [-nefri] '操作'
参数说明:
-n:使用安静模式。默认情况下,所有来自STDIN的数据都会被列到屏幕上。但加上-n后,只有经过sed处理的那一行才会被列出。
-e:直接在命令行模式进行sed编辑。
-f:直接将sed操作写入一个文件。-f filename。
-r:使用扩展型正则表达式语法。
-i:直接修改读取的文件内容,而不是由屏幕输出。
操作说明:[n1, [n2]] function
n1,n2表示操作的行数
a:新增。a后面可以接字符。字符会出现在新一行(目前的下一行)
c:替换。c后面可以接字符。字符替换n1和n2之间的行
d:删除。
i:插入。i后面可以接字符。字符会出现在新一行(目前的上一行)
s:替换。这个s操作可以搭配正则表达式(比如1,20s/old/new/g)
p:打印。通常和-n参数一起使用。
6.awk工具
相较于sed作用于一整行处理,awk倾向于一行中分成数个字段来处理。因此,awk适合处理小型文本数据。
用法: awk '条件类型1{操作1} 条件类型2{操作2} ...' filename
7.文本对比工具
diff [-bBi] from-file to-file
from-file:作为原始对比文件;
to-file:作为目标对比文件
参数:
-b:忽略一行中多个空格键的差异;
-B:忽略空白行的差异;
-i:忽略大小写不同的差异。