Chinaunix首页 | 论坛 | 博客
  • 博客访问: 388758
  • 博文数量: 166
  • 博客积分: 1972
  • 博客等级: 上尉
  • 技术积分: 1845
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-19 21:16
文章分类

全部博文(166)

文章存档

2013年(7)

2010年(159)

分类:

2010-10-21 19:05:30

随着工作的需要,越来越发现所掌握的脚本知识有限,因此,花了两天时间系统的时间看了下过滤工具使用基础。

       首先,它们都是文本过滤处理工具,适用基本的正则表达式。其次,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 \ { nm \ }              只含义同上,但p a t t e r n出现次数在nm之间

 

经常使用的正则表达式:

^            行首

$            行尾

^             t h e开头行

[ S s ] i g n a [ l L ]       对匹配单词s i g n a ls i g n a L

S i g n a lS 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 ]                大写或小写in

[ ^ $ ]                          空行

[ ^ . * $ ]                     匹配行中任意字符串

^ . . . . . . $                  包括6个字符的行

[a- zA-Z]                     任意单字符

[ a - z ] [ a - z ] *         至少一个小写字母

[ ^ 0 - 9 \ $ ]                非数字或美元标识

[ ^ 0 - 0 A - Z a - z ]     非数字或字母

[ 1 2 3 ]                       13中一个数字

[ D d ] e v i c e            单词d e v i c eD 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                     表示行号范围从xy,如25表示从第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 !                                 查询不包含指定行号xy的行。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脚本使用可以是脚本更加的高效,要熟练的使用只有在实践中慢慢来。

阅读(733) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-10-22 14:42:58

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com