十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【Linux】【命令】查找与统计【grep find wc】

【Linux】【命令】查找与统计【grep find wc】 查找与统计grep正则表达式返回值示例zgrepfind常规选项筛选选项操作选项实用示例wc实用示例grepgrep命令用于在文件中或者标准输出中搜索特定字符串并显示匹配结果。grep全称Global Regular Expression Print基本语法grep[OPTION]... PATTERN[FILE]...默认情况下PATTERN 是一个基本正则表达式Basic Regular Expression配合|可以在标准输出中进行字符串检索示例1###grep-ihello worldmemu.h main.c###grep-ihello world*.c选项optionsfull nameUsage-ccount仅显示特定字符串所在行的行号-iignore case忽略大小写-nnumber显示行号-vinvert反向选择仅列出没有特定字符串的行-rrecursive递归搜索文件目录terminal 显示路径和搜索到内容-EExtended regexp使用拓展的正则表达式 grep -Eegrep-l-仅显示包含特定字符串的文件的名称-C nContext打印匹配行的前后n行-f file-从 file 中获取 PATTERN 进行匹配-m nmatch匹配到第 n 个之后停止-A NUMAfter–after-contextNUM除了列出符合行之外并且列出后NUM行。正则表达式基本正则表达式ExpressionUsage.匹配任意单个字符。*匹配前一个字符零次或多次[ ]匹配括号内的任意一个字符[^ ]匹配括号内以外的任意一个字符\转义字符用于匹配特殊字符^匹配行首匹配行尾I或运算符( )分组运算符拓展正则表达式ExpressionUsage匹配前一个字符一次或多次?匹配前一个字符零次或一次{ }匹配前一个字符指定次数返回值在 shell 中使用$?可以得到前一条命令执行结果的返回值返回值为 0 表示命令执行成功否则命令执行失败。对于grep命令而言如果查找到目标字符串返回值为 0没有找到目标字符串返回值为 1 。返回值主要用于 Shell 编程中。示例① 对多个文件进行检索的时候会显示文件名和特定字符串所在行的完整内容。② 遍历当前目录下的所有文件包含子目录中的文件并进行搜索。grep-rmodule./*③ 使用-f选项④ 同时使用多个选项⑤ 正则表达式的使用注意使用转义字符。⑥ 使用-m选项获取某个目录下时间最新的文件或文件夹ls-tpathname|grep-m1string_to_find# csh 中将命令的执行结果赋值给变量setnetlist_dirls-tpathname|grep-m1string_to_findzgrepgrep命令不能作用于压缩文件以gz为后缀的文件需要先将其解压然后再使用。但是zgrep命令可以直接作用于压缩文件。zgrep是grep命令的拓展它的用法和grep命令完全相同。对于只使用gzip命令压缩的文件可以直接使用zgrep命令如下所示zgrepstring_to_searchtest_file.gz对于使用tar命令进行打包并压缩的文件可以使用如下方式zcat test_file.tar.gz|grep- astring_to_searchzgrep-astring_to_searchtest_file.tar.gzzcat的作用是解压文件并将内容输出到标准输出。findfind命令用于在指定的目录及其子目录中查找符合条件的文件和目录。它支持复杂的搜索条件组合并能对搜索结果执行各种操作grep是在文件中找字符串find是在目录下找文件或者其他内容。基本语法find[path...][CONDITION][OPERATION]path指定 find 命令开始搜索的目录可以是一个或多个路径。如果不指定路径默认是当前目录及其所有子目录。CONDITION定义要查找的文件或目录的属性如名称、类型、大小、时间等。OPERATION对搜索结果执行的操作如打印、删除、移动、执行等示例find./*-name*.v命令的执行结果示例如下该命令用于搜索当前目录下以.v为后缀的所有文件它会自动对子目录进行检索最终输出目标文件的相对路径。常规选项find命令的选项可以分为两部分一个是查找文件的选项另一个是找到文件之后对其进行某种操作的选项。筛选选项常用的文件筛选选项如下表optionsUsage-name pattern根据文件名进行查找pattern 中支持通配符*、?、[]。?匹配单个字符-iname pattern根据文件名进行查找忽略大小写-type type根据文件类型进行查找f表示文件d表示目录l表示链接-size n/n/-n根据文件大小进行查找n表示文件大于某个值比如 10M-n表示文件小于某个值n则是等于-depth先搜索子目录再搜索当前目录-maxdepth搜索的最大深度-perm根据权限搜索文件例如 -perm 755-mtime/mmin根据修改时间查找time_value 表示该时间值以内- 表示以外。-mtime 是按天数-mmin 是按分钟。-regex/iregex使用正则表达式匹配文件路径-iregex是正则表达式不分区大小写-user/-group按用户明或者组进行搜索逻辑运算find命令中也可以使用逻辑运算。逻辑与and或-a默认连接符find.-typef-name*.txt-size10M逻辑与是默认连接符所有在命令中可以直接省略。逻辑或-or或-ofind.-name*.txt-or-name*.md逻辑非-not或!find.-typef!-name*.log括号find.\(-name*.txt-o-name*.md\)-and-size1M括号用于组合多个条件需要对其进行转义。示例# 按时间查找find.-mtime-7# 查找最近 7 天内修改的文件find.-mtime30# 查找 30 天前修改的文件find.-mmin-60# 查找过去 60 分钟内修改的文件操作选项find命令可以对文件执行的操作如下optionsUsage-print打印搜索结果默认行为-printf自定义输出格式-delete找到文件后将其删除。-delete需要位于条件的最后且不可与-print或其他输出操作同时使用-exec coomand {} \;对每个匹配到的文件执行指定的命令。{}代表当前文件命令结尾以\;逐次执行 或批量执行结束。-ok coomand {} \;用法和-exec一样但是在执行前会提示用户确认-printf中常用的格式符如下-exec命令中的\;表示逐次执行意思是每找到一个文件执行一次命令表示批量执行将多个文件作为参数一次性传递给命令。示例## 找到一个文件执行一次命令find.-typef-name*.log-execrm{}\;## 将多个文件作为参数一次性传递给命令find.-typef-name*.log-okrm{}实用示例递归查看目录下所有文件的时间使用find命令配合ls命令可以递归查看某个目录下所有文件的更新时间find/path/to/dir-typef-execls-lrt{}其中-exec ls -lrt {} 是对找到的文件所有文件执行ls -lrt命令。查找文件内容包含特定字符串的文件find命令配合gerp命令可以实现按文件内容查找文件find.-typef-execgrep-lseaech_srting{}查找并删除 30 天前的日志文件find/var/log-typef-name*.log-mtime30-execrm{}\;查找并打印文件的完整路径find.-typef-name*.v-printf%p\n查找并移动所有 PDF 文件到另一个目录find.-typef-name*.pdf-execmv{}/path/to/destination/\;wc统计文件或者标准输出的行数、字数(word)或字节(Byte)数。基本语法wc[OPTION]...[FILE]...可以同时指定多个文件如果文件名是-或者没有指定文件名称则wc会从标准输出中读取数据并统计数量。这里的 word 指的是以空白符为分界的连续的字符串。A word is non-zero-length sequence of characters delimited by white space.wc默认统计行数、字数和字节数统计单个文件的结果如下14 23 147 依次是行数、字数和字节数。同时统计多个文件时最后会有一个统计值。选项optionsUsage-l统计行数-w统计字数-c统计字节数-m统计字符的数量(character counts)-L最长行的长度实用示例wc命令往往是配合其他命令grep、|等一起使用具体示例如下。① 统计某个文件中 Error 的数量grepErrortk_scan.log|wc-l② 统计当前目录下文件的数量不包含子目录ls-l|grep^-|wc-l③ 统计当前目录下文件的数量包含子目录ls-lR|grep^-|wc-l④ 查看某目录下文件夹(目录)的个数包括子目录ls-lR|grep^d|wc-l⑤ 统计当前文件夹下某个文件或某种后缀名称的文件的数量find.-namefilename|wc-l#find.-name*.v|wc-l
返回列表