find与grep命令及正则表达式find,grep,命令,正则表达式,linux-中国.pdf
《find与grep命令及正则表达式find,grep,命令,正则表达式,linux-中国.pdf》由会员分享,可在线阅读,更多相关《find与grep命令及正则表达式find,grep,命令,正则表达式,linux-中国.pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、find 与 grep 命令及正则表达式 find,grep,命令,正则表达式,Linux-中国.find 与 grep 命令及正则表达式gcc 命令行详解C 程序 bl2.c-对 grep.比较 Debian 与 RedHat 基本命令FTP 命令大全find 与 grep 命令及正则表达式grep 学习笔记grep 命令实例详解strace命令用法在我们开始学习新的Shell编程知识之前,我们先来看一下两个更为有用的两个命令,这两个命令虽然并不是 Shell 的一部分,但是在进行 Shell 编程时却会经常用到.随后我们会来看一下正则表达式.find 命令我们先来看的是 find 命令.这
2、个命令对于我们用来查找文件时是相当有用的,但是对于 Linux 新手来说却有一些难于使用,在一定程序是由于他所带的选项,测试,动作类型参数,而且一个参数的执行结果会影响接下来的参数.在我们深入这些选项和参数之前,我们先来看一个非常简单的例子.假如在我们的机子上有一个文件 wish.我们来进行这个操作时要以 root 身份来运行,这样就可以保证我们可以搜索整个机子:#find/-name wish-print/usr/bin/wish#正如我们可以想到的,他会打印出搜索到的结果.很简单,是不是?然而,他却需要一定的时间来运行,因为他也会同时搜索网络上的 Window 机器上的磁盘.Linux 机
3、器会挂载大块的Window 机器的文件系统.他也会同时那些位置,虽然我们知道我们要查找的文件位于 Linux 机器上.这也正是第一个选项的用武之地.如果我们指定了-mount 选项,我们就可以告诉 find 命令不要搜索挂载的目录.#find/-mount-name wish-print/usr/bin/wish#这样我们仍然可以搜索这个文件,但是这一次并没有搜索挂载的文件系统.find 命令的完整语法如下:find path optionstests actionspath 是一个很简单的部分:我们可以使用绝对路径,例如/bin,或者是使用相对路径,例如.如果我们需要我们还可以指定多个路径,
4、例如 find/var/home 主要的一些选项如下:-depth在查看目录本身以前要先搜索目录中的内容-follow跟随符号链接-maxdepths N在搜索一个目录时至多搜索 N 层-mount(或-xdev)不要搜索其他的文件系统下面的是一些 test 的选项.我们可以为 find 命令指定大量的测试,并且每一个测试会返回真或是假.当 find 命令工作时,他会考查顺序查找到的文件,并且会在这个文件上按顺序进行他们所定义的测试.如果一个测试返回假,find 命令会停止他当前正在考查的文件并继续进行下面的动作.我们在下表中列出的只是一些我们最常用到的测试,我们可以通过查看手册页得到我们可以
5、利用find命令使用的可能的扩展列表项.-atime NN 天以前访问的文件-mtime NN 天以前修改的文件-name pattern除了路径,与指定的类型匹配的文件名.为了保证指定的类型传递给 find 命令而并不是立即被 Shell 赋值,指定的类型必须用引号进行引用.-newer otherfile与 otherfile 文件相比要新的文件-type CC 类型的文件,而这里的 C 可以指定的一种类型.最常用的是 d 代表目录,而 f 是指普通的文件.对于其他的文件类型,我们可以查看手册页.-user username指定的用户所拥有的文件我们也可以使用运算符进行测试的组合.大多数的
6、有两种格式:短格式和长格式.!-not测试的反-a-and所有的测试必须为真-o-or测试中某一个为真我们可以使用括号来强行改变测试和运算符的次序.因为这些对于 Shell 来说有着特殊的意义,所以我们也需要使用反斜线将他们作为一个整体进行引用.另外,如果我们为文件名指定了匹配类型,我们也必须用引号进行引用,这样就可以避免他们被 Shell 进行扩展,从而可以将他们直接传递给 find 命令.所以如果我们要写一个这样的测试,要查找比 X 文件要近或者是以一个范围开头的文件,我们要写成下面的形式:(-newer X-o-name“_*”)现在我们要试着在当前的目录下查找最
7、近修改日期比 while2 更近的文件,我们可以用下面的命令:$find.-newer while2-print./elif3./words.txt./words2.txt./_trap$我们在上面所用的命令看起来似乎不错,但是我们却同时也搜索了当前的目录文件,而这并不是我们所希望的,我们所感兴趣只是常规文件.所以我们可以加上另外一个测试-type f:$find.-newer while2-type f-print./elif3./words.txt./words2.txt./_trap$工作原理:这些命令是如何进行工作的呢?我们指定find 命令应该在当前的目录下进行查找(.),而我们所要
8、查找的是比 while2 更新的文件(-newer while2),而且如果已经传递了测试,还要测试这个文件是否为一个常规文件(-type-f).最后,我们使用我们以前用过的动作,-print,仅仅是来验证我们所找到的文件.下面我们要查找的文件或者是以下划线开头的或者是要比 while2 文件新的文件,但是也必须为一个常规文件.这个例子可以向我们展示如何来进行测试的组合:$find.(-name“_*”-or-newer while2)-type f-print./elif3./words.txt./words2.txt./_break./_if./_set./_shi
9、ft./_trap./_unset./_until$这时我们可以看到这并不是一件很难的事情,不是这样吗?我们必须转义圆括号,这样他就不会被 Shell 所保护,同时用引号引用*,这样他就可以直接传递给 find 命令了.既然我们现在能够可靠的查找文件,下面我们就来看一下当我们查找指定的文件时我们可以进行的一些协作.我们要再一次强调,我们在这里所列出的只是一些最常用的选项,我们可以查看手册页得到全部的集合.-exec command执行一个命令.这是我们最常执行的动作.-ok command与-exec 相类似,所不同的只是他会提示用户在执行将要执行的命令之前进行命令的确认.-print打印出文
10、件名-ls使用 ls 命令列出当前的文件-exec 和-ok 命令会同一行的参数子序列作为他的参数的一部分,直到遇到一个终结符;序列.对于-exec 和-ok 来说字符串是珍上特殊的类型,而且会为当前文件的绝对路径所替换.这样的解释也许并不是太认人容易理解,但是一个例子也许可以很好的来说明这些.如下面的一个简单的例子:$find.-newer while2-type f-exec ls-l ;-rwxr-xr-x1 rickrick275 Feb 817:07./elif3-rwxr-xr-x1 rickrick336 Feb 816:52./words.txt-rwxr-xr-x1 rick
11、rick1274 Feb 816:52./words2.txt-rwxr-xr-x1 rickrick504 Feb 818:43./_trap$正如我们现在所看到的,find 命令是相当有用的.要用好这个命令只需要一些简单的练习.然而这样的练习也许要付一定的代价,所以我们应做一些 find 命令的实验.grep 命令我们将要看到的第二个非常有用的命令为 grep 命令,这是一个并不常见的名字,他是通用正则表达式解析器的简称(General Regular Expression Parser).我们使用 find 命令在我们的系统是查找所需的文件,但是我们却要使用 grep 命令在文件中查找指
12、定的字符串.而事实上,最常用的做法就是当我们在使用 find 命令时将 grep 作为一个命令传递给-exec.grep 命令可以带选项,匹配的模式以及我们要在其中查找的文件:grep options PATTERN FILES如果并没有指定文件名,他就会搜索标准输入.让我们从 grep 命令的主要的选项开始.我们在这里列出的只是一些主要的选项,我们可以从手册中得到更为详细的内容说明.-c打印出匹配行的总数,而不是打印出匹配的行-E打开扩展表达式-h禁止将在其中查找到匹配内容的文件名作为输出行的前缀-i忽略大小写-l列出带用匹配行的文件名,而不是输出实际的匹配行-v将匹配类型转换为选择不匹配的
13、行而不是匹配的行如下面的一些例子:$grep in words.txtWhen shall we three meet again.In thunder,lightning,or inrain?I come,Graymalkin!$grep-c in words.txt words2.txtwords.txt:2words2.txt:14$grep-c-v in words.txt words2.txtwords.txt:9words2.txt:16$工作原理:第一个例子中并没有指定选项,grep 命令只是简单在的 words.txt 文件中查找字符串 in,并且打印出所匹配的行.在这里并没有
14、打印出文件名,这是因为在这里我们只是使用了一个文件.在第二个例子中打印出在两个不同的中匹配行的总数,在这种情况就要打印出文件名.在最后的一个例子中我们使用了-v 选项来转换查找的条件并且打印出在两个文件中不匹配的总行数.正则表达式正是我们所看到的,grep 命令的基本用法是比较容易掌握的.现在我们要来看一下基本的正则表达式,这会允许我们做一些更为复杂的匹配.正如我们在前面所提到的,正则表达式是用在Linux或是共他的一些开源中的语言.我们可以在vi或是在编写 Perl 脚本时使用.在正则表达式的使用过程中,一些字符会被以不同的方式进行处理.最常见的一些用法如下:在一行的开头$在一行的结尾.任意
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- find grep 命令 正则 表达式 linux 中国
限制150内