分类: LINUX
2010-05-30 15:41:53
随着工作的需要,越来越发现所掌握的脚本知识有限,因此,花了两天时间系统的时间看了下过滤工具使用基础。
首先,它们都是文本过滤处理工具,适用基本的正则表达式。其次,grep是最常用的过滤工具,要说它主要针对什么,这个还说不准;awk是针对文件或字符串(表格类数据)基于指定规则浏览,因此,它的对象应该是统一的数据格式;sed由行编辑工具演变而来。
1. 常用的正则表达式
^ 只匹配行首
$ 只匹配行尾
* 只一个单字符后紧跟*,匹配0个或多个此单字符
[ ] 只匹配[ ]内字符。可以是一个单字符,也可以是字符序列。可以使用-
表示[ ]内字符序列范围,如用[ 1 - 5 ]代替[ 1 2 3 4 5 ]
\ 只用来屏蔽一个元字符的特殊含义。因为有时在s h e l l中一些元字符有
特殊含义。\可以使其失去应有意义
. 只匹配任意单字符
p a t t e r n \ { n \ } 只用来匹配前面p a t t e r n出现次数。n为次数
p a t t e r n \ { n,\ } m 只含义同上,但次数最少为n
p a t t e r n \ { n,m \ } 只含义同上,但p a t t e r n出现次数在n与m之间
经常使用的正则表达式:
^ 行首
$ 行尾
^ 以t h e开头行
[ S s ] i g n a [ l L ] 对匹配单词s i g n a l、s i g n a L、
S i g n a l、S i g n a L
[Ss]igna[lL]\. 同上,但加一句点
[ m a y M A Y ] 包含m a y大写或小写字母的行
^ U S E R $ 只包含U S E R的行
[tty]$ 以t t y结尾的行
\ . 对带句点的行
^ d . . x . . x . . x 对用户、用户组及其他用户组成员有可执行权限的目录
^ [ ^ l ] 排除关联目录的目录列表
[ . * 0 ] 0之前或之后加任意字符
[ 0 0 0 * ] 0 0 0或更多个
[ iI] 大写或小写I
[ i I ] [ n N ] 大写或小写i或n
[ ^ $ ] 空行
[ ^ . * $ ] 匹配行中任意字符串
^ . . . . . . $ 包括6个字符的行
[a- zA-Z] 任意单字符
[ a - z ] [ a - z ] * 至少一个小写字母
[ ^ 0 - 9 \ $ ] 非数字或美元标识
[ ^ 0 -
[ 1 2 3 ] 1到3中一个数字
[ D d ] e v i c e 单词d e v i c e或D e v i c e
D e . . c e 前两个字母为D e,后跟两个任意字符,最后为c e
2. grep基本选项
具体参数见man
3. Awk基础
Awk是的过滤式基于域,配合模式和动作来进行过滤动作。模式可以是任何条件语句或复合语句或正则表达式。模式包含两个特殊字段 BEGIN 和 END。 使用BEGIN语句设置计数和打印头,BEGIN语句在任何文本浏览之前; END语句用来在awk完成文本浏览动作完成之后打印文本总数和结尾状态标志。另外,其实际动作在大括号{}内指明。<感觉awk的使用与数据库的select类似>
Awk所用到的条件操作符:
< 小于
< = 小于等于
= = 等于
!= 不等于
> = 大于等于
~ 匹配正则表达式
!~ 不匹配正则表达式
4. Sed基础
Sed源于行编辑器ed,因此ed的一半命令应该都可以用。
Sed中常用的文本定位方式
x x为一行号,如1
x , y 表示行号范围从x到y,如2,5表示从第2行到第5行
/ p a t t e r n / 查询包含模式的行。例如/ d i s k /或/[a-z]/
/ p a t t e r n / p a t t e r n / 查询包含两个模式的行。例如/ d i s k / d i s k s /
p a t t e r n / , x 在给定行号上查询包含模式的行。如/ r i b b o n / , 3
x , / p a t t e r n / 通过行号和模式查询匹配行。3 . / v d u /
x , y ! 查询不包含指定行号x和y的行。1 , 2 !
常用的sed编辑命令
p 打印匹配行
= 显示文件行号
a \ 在定位行号后附加新文本信息
i \ 在定位行号后插入新文本信息
d 删除定位行
c \ 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文件中读文本
w 写文本到一个文件
q 第一个模式匹配完成后推出或立即推出
l 显示与八进制A S C I I代码等价的控制字符
{ } 在定位行执行的命令组
n 从另一个文件中读文本下一行,并附加在下一行
g 将模式2粘贴到/pattern n/
y 传送字符
n 延续到下一输入行;允许跨行的模式匹配语句
此3种过滤器一般结合shell脚本使用可以是脚本更加的高效,要熟练的使用只有在实践中慢慢来。