Life with teacher Lemon.

Linux grep 命令详解

2022.04.01 | 共 1217 字,阅读需约 3 分钟.

grep 命令详解

Linux 中强大的文本搜索工具,可以在一个或者多个文件中搜索符合条件的内容,搜索结果显示到标准输出,不影响源文件。可以用在 shell 脚本中,搜索成功返回 0,搜索不成功返回 1,搜索文件不存在则返回 2

过滤选项解释使用样例
-A <行数>显示过滤行及该行之后的指定行数的内容grep -A 10 'filter' file
-b显示过滤行内容的前面加上该行在文件中的行号grep -b 'filter' file
-B <行数>显示过滤行及该行之前的指定行数的内容grep -B 10 'filter' file
-c计算符合过滤条件的列数grep -c 'filter' file
-C <行数>显示过滤行及该行前后指定行数的内容grep -C 10 'filter' file
-d指定查找的是目录而非文件grep -d 'filter' dir/*
-E <正则>查找指定正则样式的内容grep -E '正则表达式' file
-H在过滤行前面显示所述文件grep -H 'filter' file
-i忽略过滤字符串的大小写grep -i 'filter' file
-I过滤字符串大小写敏感grep -I 'filter' file
-l显示包含过滤字符串的文件名grep -l 'filter' file
-L显示不包含过滤字符串的文件名grep -L 'filter' file
-n显示过滤内容的行号,大小写敏感grep -n 'filter' file
-q静默,不显示任何信息grep -q 'filter' file
-r类似-d,可查找目录下所有文件或指定文件grep -r 'filter' file
-v显示不包含过滤字符串的行grep -v 'filter' file
-w全词匹配grep -w 'filter' file

grep 正则表达式

正则解释
^锚定行的开始 如:'^grep'匹配所有以grep开头的行
$锚定行的结束 如:'grep$'匹配所有以grep结尾的行
.匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p
*匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行
.*匹配任意字符
[]匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep
[^]匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行
\(..\)标记匹配字符,如'\(love\)',love被标记为1
\<锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行
\>锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行
x\{m\}重复字符x,m次,如:'0\{3\}'匹配包含3个o的行
x\{m,\}重复字符x,至少m次,如:'o\{3,\}'匹配至少有3个o的行
x\{m,n\}重复字符x,至少m次,不多于n次,如:'o\{3,10\}'匹配3–10个o的行
\w匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p
\b单词锁定符,如: '\bgrep\b'只匹配grep

POSIX 字符过滤

不同国家字符编码不一致,为了保持一致,POSIX 增加了特殊的字符类,常见的一些正则表达式,推出了一些固定的写法,使用的时候需要在其外面加上 [] 使用,如: [:alnum:] 代表 [a-zA-Z0-9] ,使用方法:grep '[[:alnum:]]' file

POSIX解释
[:alnum:]文字数字字符
[:alpha:]文字字符
[:digit:]数字字符
[:graph:]非空字符(非空格、控制字符)
[:lower:]小写字符
[:upper:]大写字符
[:cntrl:]控制字符
[:print:]非空字符(包括空格)
[:punct:]标点符号
[:space:]所有空白字符(新行,空格,制表符)
[:xdigit:]十六进制数字(0-9,a-f,A-F)
今日诗词