简介
说明
本文介绍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 的行 |