4.2.1 grep和find命令
1.grep命令
grep是一个很复杂的命令,同时它也是一个强大的搜索指令族。初学者往往会被其复杂的表达方法、繁多的参数、五花八门的显示结果所困扰。因此,这里有必要对其进行专门而详细的介绍。
grep是一种强大的文本搜索工具,支持对文本的正则表达式搜索,并把匹配的行打印出来。所谓正则表达式是指在计算机科学中,一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串。grep是UNIX中的一个命令族,包括有grep、egrep和fgrep。其中egrep和fgrep命令与grep差别不大:egrep是grep的扩展,支持更多的元字符;而fgrep就是fixed文件grep或fast文件grep,在这里所有的字母都被视作单词,即在其正则表达式中,元字符表示其自身的字面意义,而不再具有特殊含义。Linux使用GNU版本的grep,其功能更强,可通过-G、-E、-F参数来使用egrep和fgrep的功能。
grep的工作方式:在一个或多个文件中搜索字符串模板,如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到显示器显示,而不影响原文件内容。
【使用权限】具有相应权限的用户。
【命令格式】grep[-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录…]
【参数说明】
-a或--text:不要忽略二进制的数据。
-A<显示列数>或--after-context=<显示列数>:除了显示符合范本样式的那一列之外,还显示该列之后的内容。
-b或--byte-offset:在显示符合范本样式的那一列之前,标示出该列第一个字符的位编号。
-B<显示列数>或--before-context=<显示列数>:除了显示符合范本样式的那一列之外,还显示该列之前的内容。
-c或--count:计算符合范本样式的列数。
-C<显示列数>或--context=<显示列数>或-<显示列数>:除了显示符合范本样式的那一列之外,还显示该列之前后的内容。
-d<进行动作>或--directories=<进行动作>:当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e<范本样式>或--regexp=<范本样式>:指定字符串作为查找文件内容的范本样式。
-E或--extended-regexp:将范本样式作为延伸的普通表示法来使用。
-f<范本文件>或--file=<范本文件>:指定范本文件,其内容含有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每列一个范本样式。
-F或--fixed-regexp:将范本样式视为固定字符串的列表。
-G或--basic-regexp:将范本样式视为普通的表示法来使用。
-h或--no-filename:在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-H或--with-filename:在显示符合范本样式的那一列之前,表示该列所属的文件名称。
-i或--ignore-case:忽略字符大小写的差别。
-l或--file-with-matches:列出文件内容符合指定的范本样式的文件名称。
-L或--files-without-match:列出文件内容不符合指定的范本样式的文件名称。
-n或--line-number:在显示符合范本样式的那一列之前,标示出该列的列数编号。
-q或--quiet或—silent:不显示任何信息。
-r或—recursive:此参数的效果和指定“-d recurse”参数相同。
-s或--no-messages:不显示错误信息。
-v或--revert-match:反转查找。
-V或—version:显示版本信息。
-w或--word-regexp:只显示全字符合的列。
-x或--line-regexp:只显示全列符合的列。
-y:此参数的效果和指定“-i”参数相同。
--help:在线帮助。
grep所支持的正则表达式元字符集(基本集)及其含义如表4-1所示。
表4-1 grep命令所支持的正则表达式元字符集(基本集)及其含义
匹配的实例:
【例4.10】grep命令的使用。
2.find命令
【使用权限】具有相应权限的用户。
【命令格式】find pathname -options [-print -exec -ok…]
【命令说明】将文件系统内符合表达式的文件列出来。用户需要将文件的名称、类别、时间、大小、权限等信息以各种组合方式列出,只有完全相符的才会被送到显示器显示出来。find命令根据下列规则判断path和expression:在命令列上第一个-(),!之前的部分为path,之后的是expression。如果path是空字符串,则使用当前路径;如果expression是空字符串,则使用-print为预设expression。
【参数说明】expression所支持的参数很多,本书只收录其中最常用的部分:
-mount,-xdev:只检查和指定目录在同一个文件系统下的文件,避免列出其他文件系统中的文件。
-amin n:在过去n分钟内被读取过。
-anewer file:比文件file更晚被读取过的文件。
-atime n:在过去n天读取过的文件。
-cmin n:在过去n分钟内被修改过。
-cnewer file:比文件file更新的文件。
-ctime n:在过去n天修改过的文件。
-empty:空的文件-gid n or -group name:gid是n或者group名称是name。
-ipath p,-path p:路径名称符合p的文件,ipath会忽略大小写。
-name name,-iname name:文件名称符合name的文件,iname会忽略大小写。
-sizen:文件大小是n单位,其中b代表512B的区块,c表示字符数,k表示KB,w表示2B。
-typec:文件类型是c的文件。
-pid n:process id是n的文件。
【例4.11】find命令的使用。