本文主要记录 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
| |