本文主要记录 Linux 中常用命令之一 Grep 的使用方法。
grep 是个命令行工具,它主要用于搜索文件中与规则表达式的纯文本数据相匹配的行。它是globally search a regular expression and print
的简写,主要用在类 Unix 系统中。
语法结构
grep [options] PATTERN [FILES…]
先来总结几个基本的options
的作用:
选项 | 含义 | 示例 | 备注 |
---|---|---|---|
–help | 显示帮助信息 | grep –help | 一般选项 |
-V(–version) | 显示版本号信息 | grep -V | 一般选项 |
-e pattern | 匹配 pattern 所指的选项,可与-f file 一起使用 |
grep -e “abc” -e “def” test.txt | 匹配选项 |
-f file | 从 file 中获取 pattern,每行 | grep -f file test.txt | 匹配选项 |
-i(–ignore-case)/-y | 忽略匹配大小写 | grep -i “abc” test.txt | 匹配选项 |
-v(–invert-match) | 不匹配 pattern 中的某行 | grep -v “abc” test.txt | 匹配选项 |
-w(–word-regexp) | 只匹配全 pattern 字的行 | grep -w “abc” test.txt | 匹配选项 |
-x(–line-regexp) | 匹配全 pattern 行 | grep -x “abc” test.txt | 匹配选项 |
-c(–count) | 输出匹配的行数 | grep -c “abc” test.txt | 输出格式选项 |
-L(–files-without-match) | 输出没有匹配的文件 | grep -L “abc” * | 输出格式选项 |
-l(–files-with-matches) | 输出匹配的文件 | grep -l “abc” * | 输出格式选项 |
-m num(–max-count=num) | 输出匹配的前 num 个 | grep -m 3 “abc” test.txt | 输出格式选项 |
-b(–byte-offset) | 每行输出匹配字符在文件中的偏移 | grep -b “abc” test.txt | 输出格式选项 |
-H(–with-filename) | 输出匹配的文件名 | grep -H “abc” * | 输出格式选项 |
-h(–no-filenmae) | 输出不匹配的文件名 | grep -h “abc” * | 输出格式选项 |
-n(–line-number) | 输出匹配所在文件的行号 | grep -n “abc” test.txt | 输出格式选项 |
-A num(–after-context=num) | 输出匹配行后的 num 行内容 | grep -A 2 “abc” test.txt | 输出内容选项 |
-B num(–before-context=num) | 输出匹配行前的 num 行内容 | grep -B 2 “abc” test.txt | 输出内容选项 |
-C num(-num/–context=num) | 输出匹配行前后 num 行的内容 | grep -C 2 “abc” test.txt | 输出内容选项 |
-r(–recursive) | 递归搜索目录文件,但不搜索链接文件 | grep -r “abc” ./ | 文件和目录选项 |
-R(–dereference-recursive) | 递归搜索所有目录文件,包含链接文件 | grep -R “abc” ./ | 文件和目录选项 |
除了options
外,下面记录下PATTERN
的使用:
.
: 匹配一个字符。?
: 最多匹配一个字符。*
: 匹配若干个字符,或者空字符。^
: 指代匹配字符位于一行的最开始。$
: 指代匹配字符位于一行的最末尾。{num}
: 重复匹配 num 次。{n,}
: 重复匹配至少 n 次。{,m}
: 重复匹配最多 m 次。{n,m}
: 重复匹配最少 n 次,最多 m 次。[ ]
: 包含匹配 [] 内的某个字符,如[a-d]代表’abcd’中的某个。
基础应用
搜索text.txt
文件中是否包含abc
的字符串,并提示匹配的行号。
1
|
|
搜索text.txt
文件中不包含abc
字符串的行,并显示出来。
1
|
|
搜索text.txt
文件中包含abc
字符串的行,不区分大小写,并显示出来。
1
|
|
搜索包含特殊字符的字符串,并显示出来,如搜索a*b
。
1
|
|
搜索当前目录下所有文件包含abc
字符串的行。
1
|
|
搜索包含abc
或aabc
或aaabc
字符串的行。
1
|
|
边界表示\b
。
1 2 3 |
|
搜索多个文件,仅仅输出匹配到的文件名。
1
|
|
高阶应用
使用grep
的 OR/AND/NOT 操作。比如想要搜索某个文件中是否含有abc
或def
字符串,就会用到 grep 的 OR 操作;想要同时搜索既含有abc
又含有def
字符串,就会用到 grep 的 AND 操作;想要搜索不包含abc
的字符串,就会用到 grep 的 NOT 操作。
OR 操作方法:
1 2 3 4 |
|
AND 操作方法:
1 2 |
|
NOT 操作方法:
1
|
|