目录
1. 语法
1.1. 常用参数
2. 常见用法
2.1. 查找关键字
2.2. 取反
2.3. 额外输出关键字上下 2 行
2.4. 额外输出关键字上面 1 行
2.5. 额外输出关键字下面 1 行
2.6. 输出关键字总行数
2.7. 输出行号
2.8. 忽略大小写
2.9. 正则匹配
3.组合使用
4. 文本三剑客其他命令
1. 语法
grep [选项] {关键字} 文件名
1.1. 常用参数
-i:忽略大小写-n:输出关键字行号-v:取反,不输出包含关键字内容-r:递归查找,用于查找多个文件是否包含某个关键字-E:使用正则表达式-A{num}:额外输出关键字下面 num 行-B{num}:额外输出关键字上面 num 行-C{num}:额外输出关键字上/下各 num 行,也可以直接使用 -{num}-c:计算关键字行数-h:不显示文件名-l:仅输出符合关键字文件名-L:输出不符合关键字文件名
2. 常见用法
2.1. 查找关键字
grep 'b' file.txt # 输出包含b的行
2.2. 取反
grep -v 'b' file.txt # 不输出包含b的行
2.3. 额外输出关键字上下 2 行
grep -C2 '3' file.txtgrep -2 '3' file.txt # 上述简写
2.4. 额外输出关键字上面 1 行
grep -B1 '3' file.txt
2.5. 额外输出关键字下面 1 行
grep -A1 '1' file.txt
2.6. 输出关键字总行数
grep -c 'b' file.txt
2.7. 输出行号
grep -n 'b' file.txt
2.8. 忽略大小写
grep -i 'B' file.txt
2.9. 正则匹配
字符 | 解释 | 用法 |
^ | 匹配以什么开始 | grep -E '^ab' 匹配以ab开头的行 |
$ | 匹配以什么结尾 | grep -E 'ab$' 匹配以ab结尾的行 |
. | 匹配任意一个字符 | grep -E 'a.c' 只匹配a与c之间拥有一个字符的行 |
.+ | 匹配1次或多次 | grep -E 'a.+c' 匹配a与c之间任意字符的行,不包含ac |
* | 匹配0次或多次 | grep -E 'a*c' 匹配a与c之间任意字符的行,包含ac |
| | 相当于 or | grep -E 'ab|ac' 匹配包含ab或ac的行 |
[] | 匹配括号中任意一个字符 | grep -E '[ac]' 匹配包含a或c的行 |
[^] | 匹配非括号中任意一个字符 | grep -E '[^ac]' 匹配不包含a或c的行 |
- | [0-9] 匹配数字 | grep -E [0-9] 匹配包含数字的行 |
[^0-9] 匹配非数字 | grep -E [^0-9] 匹配不包含数字的行 | |
[a-z] 匹配小写字符串 | grep -E [a-z] 匹配包含小写字符串的行 | |
[^a-z] 匹配非小写字符串 | grep -E [^a-z] 匹配不包含小写字符串的行 | |
[A-Z] 匹配大写字符串 | grep -E [A-Z] 匹配包含大写字符串的行 | |
[^A-Z] 匹配非大写字符串 | grep -E [^A-Z] 匹配不包含大写字符串的行 | |
() | (a|b) 匹配括号中任意字符 | grep -E '0(a|b)1' 只匹配0a1和0b1的行 |
(a)+ 匹配包含1个或多个a | grep -E '0(a)+1' 匹配0和1之前1个或多个a,0a1、0aa1... | |
{} | {n} 指定匹配n个以上 | grep -E 'ab{2}' 匹配包含ab,且a或b连续为2次以上:abb |
{n,m} 指定匹配 n-m 个 | grep -E 'ab{2,3}' 匹配包含ab,且a或b连续为2-3次:abb、aaab |
示例:
grep -E '^b' file.txt # 查找以b开头的行grep -E 'b$' file.txt # 查找以b结尾的行grep -E 'a|c' file.txt # 查找包含a或者c的行
3.组合使用
3.1. 查找当前目录下以a开头的文件,并显示文件名和行号
grep -rn '^1' ./
3.2. 显示指定目录下包含b的文件名
grep -rl 'b' /home/yt/shell/grep/
3.3. 查找指定文件中包含system的行/行号,不区分大小写
grep -in 'system' /etc/passwd
4. 文本三剑客其他命令
Linux命令_awk常用指南
Linux命令_sed常用指南