当前位置: 首页 > 科技观察

如何在Linux中进行grep搜索?举例学习几个常用的方法

时间:2023-03-15 09:36:18 科技观察

grep是一个强大的unix命令,可以在文件内容中搜索各种参数。在各种故障排除或调试中特别有用。grep有很多选项和使用场景,你不应该全部使用它们,但是有几个经常使用的grep命令。本文将举例说明一些最常用的grep命令,介绍它们的常用选项和用法。下表列出了一些常用选项及其说明:选项示例说明igrep-ipatternfilecase-insensitivesearchagrep-Anpatternfile显示搜索的最后几行bgrep-Bnpatternfile显示搜索的前几行searchlinecgrep-Cnpatternfile显示搜索的第一行和最后一行vgrep-vpatternfile显示不匹配的行cgrep-cpatternfile统计匹配行数lgrep-lpatternfile只显示匹配的文件名weresearchedwgrep-wpatternfilematcheswholewordegrep-eregexfilematchesregularexpressionagrep-apatternfile搜索二进制文件rgrep-rpatterndir递归搜索目录表达式,你可以像这样使用grep:grepsearch_patternfilename现在让我们看看不区分大小写搜索的几个常见示例默认情况下,grep是区分大小写的。您可以使用-i选项使其不区分大小写:grep-isearch_patternfilename显示匹配文本前后的行默认情况下,您只会看到匹配文本的当前行。但是,在进行故障排除时,查看匹配行之前或之后的行也很有帮助。您可以使用-A显示匹配行之后的行。请记住,A代表之后。以下命令将显示匹配行及其后的5行:grep-A5search_patternfilename同样,您可以使用-B选项显示匹配行之前的行。请记住,B代表之前(Before)。以下命令将显示匹配行前后的5行:grep-B5search_patternfilename我最喜欢的是选项-C,因为它显示匹配行前后的行。C代表圆。以下命令将显示匹配行之前的5行、匹配行和匹配行之后的5行:grep-C5search_patternfilenameshownon-matchinglines您可以使用grep显示所有不匹配的行给定的表达。这个“反向匹配”使用了-v选项:grep-vsearch_patternfilename你可以同时使用-i和-v。计算匹配行数使用-c选项不显示匹配行,而只显示与给定表达式匹配的行数。注意这里的c是小写的c。grep-csearch_patternfilename您可以同时使用-c和-v选项来查看与给定表达式不匹配的行数。当然也可以结合不区分大小写的-i选项。显示匹配行的行号要显示匹配行的行号,请使用-n选项。grep-nsearch_patternfilename显示行号也可以用-v反向搜索。在多个文件中搜索可以给多个文件grep搜索:grepsearch_patternfile1file2这种搜索是可以的。但通常更实用和常用来搜索特定类型的文件,比如只搜索shell脚本(以.sh结尾的文件),可以这样使用grep命令:grepsearch_pattern*.sh递归搜索所有文件在目录中您可以使用-r选项执行递归搜索,在当前目录和子目录的所有文件中搜索给定表达式:grep-rsearch_patterndirectory_path仅显示文件名默认情况下,grep显示匹配行。如果您对多个文件进行了搜索并且只想查看哪些文件包含字符串,则可以使用-l选项。grep-lsearch_patternfiles_pattern比如你想在所有.md文件中搜索“handbook”这个词,你可以这样做:grep-lhandbook*.md全字符匹配(搜索完整的词)默认情况下,grep将显示给定字符串的任何一行。你可能并不总是想要这个,比如说,如果你正在搜索单词“done”,它的结果也会显示包含“doner”或“abandoned”的行。要使用全字符匹配,可以使用-w选项:grep-wsearch_stringfile这样,在搜索“done”这个词时,只会显示包含“done”的行,包含“doner”或“的行abandoned”不会显示OK。按正则表达式搜索您可以使用正则表达式进行搜索,选项-e允许使用正则表达式,另一个选项-E允许使用扩展的正则表达式。grep-eregex_pattern文件使用“或运算符”|可以在同一个grep搜索中使用多个表达式,如果要搜索包含“表达式1”或“表达式2”的行,可以使用“或(OR)”运算符|,但需要加一个转义符反斜杠:grep'pattern1\|pattern'文件名AND运算符没有特定选项。为此,您可以多次使用grep和管道重定向。搜索二进制文件默认情况下,grep忽略二进制文件。您可以使用-a选项使其在二进制文件中搜索,就好像它是文本文件一样:grep-apatternbinary_file