简介

说明

        本文介绍Linux的grep命令的用法。

grep命令简介

        grep命令用于搜索文件中的内容(字符串)。

        grep支持 ​​正则表达式​​。

示例

基本用法


命令



作用



grep "hello" * -nsr



在当前目录下的所有文件、目录中查找“hello”



grep "hello" * -nsr -C 3



在当前目录下的所有文件、目录中查找“hello”,并打印上下3行



grep "hello\|hi" * -nsr



在当前目录下的所有文件、目录中查找“hello”或“hi”



grep '^root|bash$' * -nsr



查找以 root 为行首的或以 bash 为行尾的行



grep "hello" kernel -nsr



在当前目录的kernel子目录中查找“hello”



grep "hello" a.txt -n



在当前目录的a.txt文件中查找“hello”


包含/不包含


命令



作用



grep "hello" --exclude-dir=dir1



在当前目录下查找除了dir1目录的hello



grep "hello" --exclude-dir={dir1,dir2}



在当前目录下查找除了dir1和dir2目录的hello



grep "hello" --include=*.{php,c} * -nswr



在当前目录及子目录的以.php和.c文件中搜索"hello"


特殊字符


命令



作用



grep -e ".hello" * -nsr 或

grep "\.hello" * -nsr



在当前目录下的所有文件、目录中查找“.hello”



grep -e "client->flags" * -nsr 或

grep "client\->flags" * -nsr



在当前目录下的所有文件、目录中查找“client->flags”


其他


命令



作用



grep "TEXTBASE" * -nsr | grep "s3c2440"



找完TEXTBASE之后的结果再查找s3c2440。可达到指定s3c2440目录查找的类似效果



grep "hello" * -nsr | grep -v "word\|test"



在当前目录及子目录查找"hello",排除有world或test的行。

注意,加了-v会不高亮"hello",如果要高亮,则后边加一个| grep "hello"。


选项


选项



含义


-A  n

显示匹配到的字符串所在的行及其后n行。  (after)

-B  n

显示匹配到的字符串所在的行及其前n行。(before)

-C  n


显示匹配到的字符串所在的行及其前后各n行。(context)

grep "hello" a.txt -C 10



-c


显示总共有多少行被匹配到了,而不是显示被匹配到的内容

--color

关键字高亮显示

-e

将引号内的内容看为正则表达式。此时不需要加转义字符。

-E, --extended-regexp

将引号内的内容看为扩展的正则表达式(ERE)。此时不需要加转义字符。

-F, --fixed-strings

将引号内容看为新行的分隔符。

-G, --basic-regexp

将引号内的内容看为基本的正则表达式(BRE)。此时需要加转义字符。


--exclude=FILE_PATTERN



排除指定的文件(支持正则表达式)



--exclude-from=FILE



排除指定的文件来搜索(不支持正则表达式)



--exclude-dir=DIR_PATTERN



排除指定的目录来搜索(支持正则表达式)



--include=FILE_PATTERN



指定文件搜索(支持正则表达式)



-i, --ignore-case



不区分大小写地搜索。默认情况区分大小写



-I



不区分大小写(只适用于单字符)



-h



查询多文件时不显示文件名



-l



查询多文件时只输出匹配的文件名,不输出内容。



-L



查询多文件时只输出不匹配的文件名,不输出内容。



-n



显示匹配行及行号



-R, -r



递归地



-s



不显示不存在或无匹配文本的错误信息



-v



显示不包含匹配文本的所有行



-w



只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’)



其他操作



grep -e pattern1 | pattern2 files

或者grep pattern1\| pattern2 files



显示匹配 pattern1 或 pattern2 的行。

例: 递归查找有“hello”或者“hi”的文件

grep "hello\|hi" * -nsr   或者grep -e "hello|hi" * -nsr



grep pattern1 files | grep pattern2



显示既匹配 pattern1 又匹配 pattern2 的行