一、什么是正则表达式
字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等。字符串是0个或更多个字符的序列。文本也就是文字,字符串。说某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件。
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
二、正则表达式的三种文本处理工具、命令。
I.grep
1.gerp的常用参数
-n 只显示行号
-o 只显示匹配的内容
-q 静默模式,没有输出,需要使用$?来判断有没有过滤到自己想要的东西
-l 如果匹配成功,则输出文件名称,如果失败则不输出,通常会-rl一起连用
-A 如果匹配成功,会将匹配到的内容和后N行一起输出
-B 如果匹配成功,会将匹配到的内容和前N行一起输出
-C 如果匹配成功,会将匹配到的内容和前后N行一起输出
-c 如果匹配成功,会将匹配内容的行数输出
-E grep的扩张,相当于egrep
-i 忽略大小写
-v 取反,不匹配
-w 匹配单词
2.正则介绍
^ 行首
$ 行尾
. 除了换行符以外的单个字符
* 前导字符的零个或多个
.* 所有字符
[] 字符组内的任一字符
[^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
^[^] 非字符组内的字符开头行
[a-z] 小写字母
[A-Z] 大写字母
[a-z] 小写和大写字母
[0-9] 数字
扩展正则 sed 加 -r 参数 或转义
grep 加 -E 或 egrep 或转义
AWK 直接支持 但不包含{n,m}
? 前导字符零个或一个
+ 前导字符一个或多个
x{m} x出现m次
x{m,} x出现m至多次
x{m,n} x出现m至n次
II.sed
流编辑器 stream editer,是以行为单位的处理程序。
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。
1.命令格式
sed [-nefri] ‘command’ 输入文本
2.常用选项
-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才 会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的档案内容,而不是由萤幕输出。
3.常用命令
a 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c 取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d 删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p 列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s 取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦
III.awk
awk是行处理器,依次对每一行进行处理,然后输出
1.命令格式
awk [options] 'commands' files
2.常用选项
-F 定义字段的分割符,默认的分隔符是连续的空格或制符表
-v 定义变量并赋值 也可以借用次方式从shell变量中引入
2.特殊要点
$0 表示整个当前行
$1 每行第一个字段
NF 字段数量变量
NR 每行的记录号,多文件记录递增
FNR 与NR类似,不过多文件记录不递增,每个文件都从1开始
\t 制表符
\n 换行符
FS BEGIN时定义分隔符
RS 输入的记录分隔符,默认为换行符(即文本是按一行一行输入)
~ 匹配,与==相比不是精确比较
!~ 不匹配,不精确比较
== 等于,必须全部相等,精确比较
!= 不等于,精确比较
&& 逻辑与
+ 匹配时表示1个或者1个以上
/[0-9][0-9]+/ 两个或两个以上数字
/[0-9][0-9]*/ 一个或一个以上数字
FILENAME 文件名
OFS 输出字段分隔符,默认也是空格,可以改为制表符等
ORS 输出的记录分隔符,默认为换行符,既处理结果也是一行一行输出
-F '[:#/]' 定义三个分隔符
print 是awk打印指定内容的主要命令