目录
一、正则表达式
1.1 正则符
在使用正则表达式的时候,当前环境的语系十分重要,不同的语系会导致不同的选取结果。为了避免编码造成的英文和数据选取问题,因此有些特殊符号定义如下表:
特殊符号 | 代表意义 |
[:alnum:] | 表示英文大小写字符和数字;即a-z,A-Z,0-9 |
[:alpha:] | 表示英文大小写字符;即a-z,A-Z |
[:digit:] | 表示数字;即0-9 |
[:lower:] | 表示小写字符;即a-z |
[:upper:] | 表示大写字符;即A-Z |
正则表达式特殊字符归纳如下表所示:
基础正则表达式 | |
正则符 | 说明 |
. | 表示一个任意字符。 |
* | 表示重复前一个字符任意次。可以是零次,此时表示空字符。 |
.* | 表示零个或多个任意字符。 |
\ | 转义符,表示取消特殊符号的特殊意义。 |
^ | 表示行首。在中括号内表示取反。 |
$ | 表示行尾。 在Windows中,使用的断行字符为 '^M$' (即 CR、LF);在LInux中,使用的断行字符为 '$' (即 LF)。 |
[xyz] | 中括号内无论几个字符,都代表一个待查找的字符。 |
[n1-n2] | 中括号内的'-'是有特殊含义的,表示两个字符之间所有连续的字符都是待查找的字符。 |
[^xyz] | 中括号内的'^'是有特殊含义的,表示反向选择。 |
\{n,m\} | 连续n到m个的前一个字符。\{n\}:连续n个的前一个字符。\{n,\}:连续n个以上的前一个字符。 |
扩展正则表达式 | |
+ | 重复一个或多个前一个字符。 |
? | 重复零个或一个前一个字符。 |
| | 用 ‘或’ 的方式查出数个字符串。 |
(x) | 找出 “组” 字符串。 |
(x)+ | 多个重复组的判别。 |
1.2 通配符
在Linux的bash操作环境下有一个常用功能,叫做通配符,常用通配符如下表所示:
符号 | 说明 |
* | 表示零个到无穷多个任意字符。 |
? | 表示一定有一个任意字符。 |
[abc] | 表示一定有一个在中括号内的字符。(示例 '[abc]' 的含义:选取 a、b、c中的一个字符) |
[a-c] | 表示在编码顺序内的所有字符,都会被选取。(示例 '[a-c]' 的含义:选取 a、b、c中的一个字符) |
[^abc] | 表示反向选取中括号内的字符。(示例 '[^abc]' 的含义:选取 a、b、c以外的所有字符) |
看起来正则符与通配符相差不大,但是实际上并不相同,不能弄混淆了,更不能相互乱用。例如,通配符中的 '*' 表示零个到无穷多个任意字符,而正则符中的 '*' 表示重复前一个字符任意次。
二、正则三剑客
2.1 grep
grep:主要是分析一行数据,满足我们所需的,就取出该行;grep默认支持基础正则表达式语法;若要支持扩展型正则表达式语法,需要使用egrep(或grep -E)。
指令格式:grep [-cinv] '查找字符串' filename | |
参数 | 说明 |
-c | 计算找到 “查找字符串” 的次数。 |
-i | 在查找的时候,忽略大小写的不同。 |
-n | 顺便输出行号。 |
-v | 反向选择。 |
-An | 后面接数字,除了列出当前行,还列出后面 n 行。 |
-Bn | 后面接数字,除了列出当前行,还列出前面 n 行。 |
--color=auto | 将找到的关键字,着色显示。 |
示例:
2.2 sed
sed :以行为单位进行数据的替换、删除、新增、选择。
指令格式:sed [-nefr] [动作] | |
参数 | 说明 |
-n | 表示只有经过sed特殊处理的那一行才会被列出来。不使用该参数,则所有数据会全部列出来。 |
-e | 直接在命名行模式下进行sed的动作编辑。 |
-f | 直接将sed的动作编辑,写在一个文件内。 |
-r | 表示支持扩展型正则表达式的语法。不使用该参数,则默认使用基础正则表达式语法。 |
-i | 直接修改、读取文件的内容,而不是由屏幕输出。 |
动作说明:'[n1[, n2]]Function' | |
Function | 代表含义 |
a | 新增,a的后面可以接字符串,这些字符串会出现在新的一行(目前的下一行)。 |
c | 替换,c的后面可以接字符串,这些字符串可以替换n1到n2之间的行。 |
d | 删除,d的后面不用接字符串。 |
i | 插入,i的后面可以接字符串,这些字符串会出现在新的一行(目前的上一行)。 |
p | 打印,将某个选项的数据打印出来,通常p会与 ‘-n’ 参数一起使用。 |
s | 替换,可以直接进行替换的工作,通常搭配正则表达式一起使用。 |
示例:
2.3 awk
awk :处理每一行的字段内的数据,默认的字段分隔符为 “空格键” 或 “Tab键” 。
指令格式:awk '条件1 {动作1} 条件2 {动作2} ...' filename | |
变量名称 | 代表含义 |
$0 | 在每一行的每个字段都有变量名称,$0代表一整行数据的意思。 |
$1、$2、$3 | 表示以分隔符分隔的第一、第二、第三字段。 |
NF | 每一行($0)拥有的字段总数。 |
NR | 当前所处理的是第几行数据。 |
FS | 目前的分隔符,默认是空格。 |
BEGIN | 最先处理动作的条件。可以预先设置分隔字符。 |
END | 最后处理动作的条件。 |
示例: