楼主: bnso

Linux Shell介绍

[复制链接]
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
51#
 楼主| 发表于 2006-8-13 18:43 | 只看该作者
8.1 grep
g r e p一般格式为:
grep [选项]基本正则表达式[文件]
这里基本正则表达式可为字符串。
8.1.1 双引号引用
在g r e p命令中输入字符串参数时,最好将其用双引号括起来。例如:“m y s t r i n g”。这样做
有两个原因,一是以防被误解为s h e l l命令,二是可以用来查找多个单词组成的字符串,例如:
“jet plane”,如果不用双引号将其括起来,那么单词p l a n e将被误认为是一个文件,查询结果
将返回“文件不存在”的错误信息。
在调用变量时,也应该使用双引号,诸如: g r e p“$ M Y VA R”文件名,如果不这样,将
没有返回结果。
在调用模式匹配时,应使用单引号。
8.1.2 grep选项
常用的g r e p选项有:
-c 只输出匹配行的计数。
-i 不区分大小写(只适用于单字符)。
-h 查询多文件时不显示文件名。
-l 查询多文件时只输出包含匹配字符的文件名。
-n 显示匹配行及行号。
-s 不显示不存在或无匹配文本的错误信息。
-v 显示不包含匹配文本的所有行。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
52#
 楼主| 发表于 2006-8-13 18:44 | 只看该作者
8.1.3 查询多个文件
如果要在当前目录下所有. d o c文件中查找字符串“ s o r t”,方法如下:
$ grep "sort"*.doc
或在所有文件中查询单词“ sort it”
$ grep "sort it" *
现在讲述在文本文件中g r e p选项的用法。
8.1.4 行匹配
$ grep -c "48"data.f
$ 4
g r e p返回数字4,意义是有4行包含字符串“4 8”。
现在显示包含“4 8”字符串的4行文本:
第8章g rep 家族57
下载
8.1.5 行数
显示满足匹配模式的所有行行数:
行数在输出第一列,后跟包含4 8的每一匹配行。
8.1.6 显示非匹配行
显示所有不包含4 8的各行:
8.1.7 精确匹配
可能大家已注意到,在上一例中,抽取字符串“ 4 8”,返回结果包含诸如4 8 4和4 8 3等包含
“4 8”的其他字符串,实际上应精确抽取只包含4 8的各行。注意在每个匹配模式中抽取字符串
后有一个< Ta b >键,所以应操作如下:
< Ta b >表示点击t a b键。
使用g r e p抽取精确匹配的一种更有效方式是在抽取字符串后加\ >。假定现在精确抽取4 8,
方法如

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
53#
 楼主| 发表于 2006-8-13 18:44 | 只看该作者
8.1.8 大小写敏感
缺省情况下, g r e p是大小写敏感的,如要查询大小写不敏感字符串,必须使用- i开关。在
d a t a . f文件中有月份字符S e p t,既有大写也有小写,要取得此字符串大小写不敏感查询,方法
如下:
8.2 grep和正则表达式
使用正则表达式使模式匹配加入一些规则,因此可以在抽取信息中加入更多选择。使用
正则表达式时最好用单引号括起来,这样可以防止g r e p中使用的专有模式与一些s h e l l命令的
特殊方式相混淆。
58 第二部分文本过滤
下载
8.2.1 模式范围
假定要抽取代码为4 8 4和4 8 3的城市位置,上一章中讲到可以使用[ ]来指定字符串范围,这
里用4 8开始,以3或4结尾,这样抽出4 8 4或4 8 3。
8.2.2 不匹配行首
如果要抽出记录,使其行首不是4 8,可以在方括号中使用^记号,表明查询在行首开始。
8.2.3 设置大小写
使用- i开关可以屏蔽月份S e p t的大小写敏感,也可以用另一种方式。这里使用[ ]模式抽取
各行包含S e p t和s e p t的所有信息。
如果要抽取包含S e p t的所有月份,不管其大小写,并且此行包含字符串4 8 3,可以使用管
道命令,即符号“|”左边命令的输出作为“ |”右边命令的输入。举例如下:
不必将文件名放在第二个g r e p命令中,因为其输入信息来自于第一个g r e p命令的输出。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
54#
 楼主| 发表于 2006-8-13 18:44 | 只看该作者
8.2.4 匹配任意字符
如果抽取以L开头,以D结尾的所有代码,可使用下述方法,因为已知代码长度为5个字
符:
将上述代码做轻微改变,头两个是大写字母,中间两个任意,并以C结尾:
8.2.5 日期查询
一个常用的查询模式是日期查询。先查询所有以5开始以1 9 9 6或1 9 9 8结尾的所有记录。使
用模式5 . . 1 9 9 [ 6 , 8 ]。这意味着第一个字符为5,后跟两个点,接着是1 9 9,剩余两个数字是6或
8。
第8章g rep 家族59
下载
查询包含1 9 9 8的所有记录的另外一种方法是使用表达式[ 0 - 9 ] \ { 3 \ } [ 8 ],含义是任意数字重
复3次,后跟数字8,虽然这个方法不像上一个方法那么精确,但也有一定作用。
8.2.6 范围组合
必须学会使用[ ]抽取信息。假定要取得城市代码,第一个字符为任意字符,第二个字符在
0到5之间,第三个字符在0到6之间,使用下列模式即可实现。
这里返回很多信息,有想要的,也有不想要的。参照模式,返回结果是正确的,因此这
里还需要细化模式,可以以行首开始,使用^符号

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
55#
 楼主| 发表于 2006-8-13 18:45 | 只看该作者
8.2.7 模式出现机率
抽取包含数字4至少重复出现两次的所有行,方法如下:
上述语法指明数字4至少重复出现两次。
同样,抽取记录使之包含数字9 9 9(三个9),方法如下:
如果要查询重复出现次数一定的所有行,语法如下,数字9重复出现两次:
有时要查询重复出现次数在一定范围内,比如数字或字母重复出现2到6次,下例匹配数
字8重复出现2到6次,并以3结尾:
60 第二部分文本过滤
下载
8.2.8 使用grep匹配“与”或者“或”模式
g r e p命令加- E参数,这一扩展允许使用扩展模式匹配。例如,要抽取城市代码为2 1 9或
2 1 6,方法如下:
8.2.9 空行
结合使用^和$可查询空行。使用- n参数显示实际行数:
8.2.10 匹配特殊字符
查询有特殊含义的字符,诸如$ . ' " * [] ^ | \ + ? ,必须在特定字符前加\。假设要查询包含“.”
的所有行,脚本如下:
或者是一个双引号:
以同样的方式,如要查询文件名c o n f t r o l l . c o n f(这是一个配置文件

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
56#
 楼主| 发表于 2006-8-13 18:45 | 只看该作者
8.2.11 查询格式化文件名
使用正则表达式可匹配任意文件名。系统中对文本文件有其标准的命名格式。一般最多
六个小写字符,后跟句点,接着是两个大写字符。例如,要在一个包含各类文件名的文件
f i l e n a m e . d e p o s i t中定位这类文件名,方法如下:
8.2.12 查询IP地址
查询D N S服务是日常工作之一,这意味着要维护覆盖不同网络的大量I P地址。有时地址
I P会超过2 0 0 0个。如果要查看n n n . n n n网络地址,但是却忘了第二部分中的其余部分,只知有
两个句点,例如n n n . n n . .。要抽取其中所有nnn.nnn IP地址,使用[ 0 - 9 ] \ { 3 \ } \ . [ 0 - 0 \ { 3 \ } \。含义是
任意数字出现3次,后跟句点,接着是任意数字出现3次,后跟句点。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
57#
 楼主| 发表于 2006-8-13 18:45 | 只看该作者
8.3 类名
g r e p允许使用国际字符模式匹配或匹配模式的类名形式。
表8-1 类名及其等价的正则表达式
类等价的正则表达式类等价的正则表达式
[ [ : u p p e r : ] ] [ A - Z ] [ [ : a l n u m : ] ] [ 0 - 9 a - zA-Z]
[ [ : l o w e r : ] ] [ a - z ] [ [ : s p a c e : ] ] 空格或t a b键
[ [ : d i g i t : ] ] [ 0 - 9 ] [ [ : a l p h a : ] ] [ a - z A - Z ]
现举例说明其使用方式。要抽取产品代码,该代码以5开头,后跟至少两个大写字母。使
用的脚本如下:
如果要抽取以P或D结尾的所有产品代码,方法如下:
使用通配符*的匹配模式
现在讲述g r e p中通配符*的使用。现有文件如下:
下述g r e p模式结果显示如下:
如在行尾查询某一单词,试如下模式:
这将在所有文件中查询行尾包含单词d e v i c e的所有行。
8.4 系统grep命令
使用已学过的知识可以很容易通过g r e p命令获得系统信息。下面几个例子中,将用到管
62 第二部分文本过滤
下载
道命令,即符号|,使用它左边命令的输出结果作为它右边命令的输入。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
58#
 楼主| 发表于 2006-8-13 18:45 | 只看该作者
8.4.1 目录
如果要查询目录列表中的目录,方法如下:
如果在一个目录中查询不包含目录的所有文件,方法如下:
要查询其他用户和其他用户组成员有可执行权限的目录集合,方法如下:
8.4.2 passwd文件
上述脚本查询/ e t c / p a s s w d文件是否包含l o u i s e字符串,如果误输入以下脚本:
将返回g r e p命令错误代码'No such file or directory'。
上述结果表明输入文件名不存在,使用g r e p命令- s开关,可屏蔽错误信息。
返回命令提示符,而没有文件不存在的错误提示。
如果g r e p命令不支持- s开关,可替代使用以下命令:
脚本含义是匹配命令输出或错误( 2 > $ 1),并将结果输出到系统池。大多数系统管理员称
/ d e v / n u l l为比特池,没关系,可以将之看成一个无底洞,有进没有出,永远也不会填满。
上述两个例子并不算好,因为这里的目的只想知道查询是否成功。本书后面部分将讨论
g r e p命令的e x i t用法,它允许查询并不成功返回。
如要保存g r e p命令的查询结果,可将命令输出重定向到一个文件。
脚本将输出重定向到目录/ t m p下文件p a s s w d . o u t中。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
59#
 楼主| 发表于 2006-8-13 18:46 | 只看该作者
8.4.3 使用ps命令
使用带有ps x命令的g r e p可查询系统上运行的进程。ps x命令意为显示系统上运行的所有
进程列表。要查看D N S服务器是否正在运行(通常称为n a m e d),方法如下:
输出也应包含此g r e p命令,因为g r e p命令创建了相应进程, ps x将找到它。在g r e p命令中
使用- v选项可丢弃p s命令中的g r e p进程。
第8章g rep 家族63
下载
如果ps x不适用于用户系统,替代使用ps -ef。
8.4.4 对一个字符串使用grep
g r e p不只应用于文件,也可应用于字符串。为此使用e c h o字符串命令,然后对g r e p命令使
用管道输入。
匹配成功实现。
因为没有匹配字符串,所以没有输出结果。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
60#
 楼主| 发表于 2006-8-13 18:46 | 只看该作者
8.5 egrep
e g r e p代表e x p r e s s i o n或extended grep,适情况而定。e g r e p接受所有的正则表达式, e g r e p
的一个显著特性是可以以一个文件作为保存的字符串,然后将之传给e g r e p作为参数,为此使
用- f开关。如果创建一个名为g r e p s t r i n g s的文件,并输入4 8 4和4 7:
上述脚本匹配d a t a . f中包含4 8 4或4 7的所有记录。当匹配大量模式时, - f开关很有用,而在
一个命令行中敲入这些模式显然极为繁琐。
如果要查询存储代码3 2 L或2 C C,可以使用(|)符号,意即“|”符号两边之一或全部。
可以使用任意多竖线符“ |”,例如要查看在系统中是否有帐号l o u i s e、m a t t y或pauline ,
使用w h o命令并管道输出至e g r e p。
还可以使用^符号排除字符串。如果要查看系统上的用户,但不包括m a t t y和p a u l i n e,方
法如下:
如果要查询一个文件列表,包括s h u t d o w n、s h u t d o w n s、r e b o o t和r e b o o t s,使用e g r e p可容
易地实现。
64 第二部分文本过滤
下载
8.6 小结
希望大家已经理解了g r e p的灵活性,它是一个很强大而流行的工具,像其他许多U N I X工
具一样,已经被使用在D O S中。如果要通过文件快速查找字符串或模式, g r e p是一个很好的
选择。简单地说, g r e p是s h e l l编程中很重要的工具,在本书后面部分使用其他U N I X工具和进
行变量替换时将发现这一点。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表