第12章 正规表示法与文件格式化处理
正则表示法就是处理字符串的方法——作为系统管理员,有的时候可能系统有一些错误信息,但是你怎样从大量的信息中找出错误信息呢,这就是正规表示法的用途了。
正规表示法与Shell在Linux当中的角色定位——基础而又繁琐
正规表示法的字符串表示方式依照不同的严谨度分为基础正规表示法和延伸正规表示法
正规表示法和通配符是完全不一样的。通配符代表的是bash操作接口的一个功能,而正规表示法是一种字符串处理的表示方式。
-------------------------------
基础正规表示法
不同的语系在面对同个二进制编码文件时,撷取结果会有所不同的。我们使用的是兼容于POSIX的标准,因此就使用“C”这个语系。LANG=C的一些特殊符号:
特殊符号 代表意义
[:alnum:] 代表英文大小写字符及数字,亦即0-9, A-Z, a-z
[:alpha:] 代表任何英文大小写字符,亦卲A-Z, a-z
[:blank:] 代表空格键与[Tab]按键两者
[:cntrl:] 代表键盘上的控制按键,亦即包括CR, LF, Tab, Del.. 等
[:digit:] 代表数字而已,亦即0-9
[:graph:] 除了空格符(空格键与[Tab]按键)外的其他所有按键
[:lower:] 代表小写字符,亦即a-z
[:print:] 代表任何可以被打印出来的字符
[:punct:] 代表标点符号(punctuation symbol),亦即:" ' ? ! ; : # $...
[:upper:] 代表大写字符,亦即A-Z
[:space:] 任何会产生空白的字符,包括空格键, [Tab], CR 等等
[:xdigit:] 代表16进位的数字类型,因此包括:0-9, A-F, a-f 的数
grep的一些进阶选项
[root@www ~]# grep [-A] [-B] [--color=auto] '搜寻字符串' filename
选项与参数:
-A :后面可加数字,为after的意思,除了列出该行外,后续的n行也列出;
-B :后面可加数字,为befer 癿意思,除了列出该行外,前面的n行也列出;
--color=auto 可将正确的那个撷取数据列出颜色
grep很常用的,它主要是用来进行字符串数据的比对,然后将符合用户需要的字符串打印出来。grep在查询一个字符串时,是以“整行”为单位输出的。
grep要撷取不包含某个关键字的行,只要写 –vn
如果不论大小写,只要写成 –in ‘字符串‘
例:撷取前面没有g的oo,只要写 –n ‘[^g]oo’
中括号里面无论放多少字符,都是选其中一个的,或的关系
如果某字符前不想有小写,只要写 –n ‘[^a-z]oo’
如果只撷取在行首的the,可以写 –n ‘^the’
如果行首只能是小写字符,类似上一个方法,也可以写成 ‘^[[:lower:]]’
制表符^在中括号内是“否定”,在外是定位在行首的意思
$是行尾符
模糊查询的话,可以用“小数点”代表【有且仅有一个任意字符】的意思,如果是“*”,代表重复0或多个前面的字符,小数点与*可以结合使用。
如果要限定字符范围,比如找出3个以上连续的o,可以是 ‘o\{3\}’ ,要找出3-5个呢,可以用 ‘o\{3,5\}’ 就好了
----------------------------------
sed工具
部分数据的搜寻并取代的功能
![](http://hi.csdn.net/attachment/201110/28/0_13197897622TWU.gif)
直接修改文件内容(危险动作)
使用的就是上一个指令了,不过遇到一些特殊符号记得要用跳脱符号\
----------------------------------------------------------------------------
延伸正规表示法
在延伸正规表示法中,可以用“|”来表示搜寻条件的“或”,不过grep要改成egrep(推荐)或者grep -E;
-------------------------------------------------------------------------------
文件的格式化与相关处理
格式化打印:printf
![](http://hi.csdn.net/attachment/201110/28/0_13197899660357.gif)
awk工具
比较倾向于将一行当中分成数个“字段”来处理
感觉这个就跟函数里面的打印输出一般——
注意事项:
1.awk的指令间隔:所有awk的动作,亦即在{}内的动作,如果有需要多个指令辅助时,可利用分号间隔,或者直接用回车键隔开
2.与bash shell不同,在awk中,变量可以直接使用,不需加上$符号
文件比对工具
最常见的是diff,此外cmp也可以比对非纯文本文件。
diff,用行为单位来比对两个文件之间的差异。——比对前后版本
![](http://hi.csdn.net/attachment/201110/28/0_1319790295uR66.gif)
cmp主要利用字节为单位比对,当然也可以比对二进制文件
cmp默认只会输出第一个发现的差异哦
patch——与diff密不可分
用diff比对新旧两个文件,将差异文件制作为补丁,再用补丁文件更新旧文件,就可以完成“升级”功能了