linux grep
grep擅长查找功能:grep [OPTIONS] PATTERN [FILE...]
常见应用:
1、内容检索
获取行 grep pattern file 获取内容 grep -o pattern file 获取上下文 grep -A -B -C pattern file (前,后,中间) 样例: grep -no "[0-9]*0$" list.txt 匹配尾号未0的数字,仅输出对应数字 grep -A1 "2," list.txt
2、文件检索
递归搜索 grep pattern -r dir/ 展示匹配文件名 grep -H -r 111 /tmp/1 只展示匹配文件名 grep -l -r 111 /tmp/1
eg:
grep -r code ljm/ 递归检索内容,打印文件和文件名grep -H 111 /tmp/1
grep -l -r code ljm/ 打印匹配的文件名
grep -L -r code ljm/ 打印不匹配的文件名
grep -H -r code ljm/ 打印匹配的内容,包括文件名
grep -h -r code ljm/ 打印匹配的内容,不包括文件名
3、范围约束:
忽略大小写 grep -i pattern file 不显示匹配的行 grep -v pattern file 使用扩展正则表达式 grep -E pattern file ?? 待深入 文件范围和目录范围约束 grep 111 -r /tmp/demo/ --include "11*" eg:
grep -E 'a|b' list.txt 匹配包含a、b的内容
4、进程检索
进程过滤场景比较特殊,需要注意
grep 本身会开启新进程,所以需要单独过滤掉grep 进程
例子:ps -ef | grep ssh | grep -v grep 找到带有ssh进程的参数
附件:
常用正则:
表达式 | 意义 | 例子 |
^ | 匹配开头 | grep ^a list.txt |
$ | 匹配结尾 | grep a$ list.txt |
[] | 匹配区间 |
grep [a-z] list.txt 匹配所有小写字母 grep [0-9] list.txt 匹配所有数字 grep [ab] list.txt 匹配包含a、b |
[^] | 不匹配区间 | grep [^ab] list.txt 匹配不包含a、b |
* | 0个或多个 | |
. | 任意字符 | |
? | 非贪婪匹配,匹配0个或1个 | |
{n} | 重复n次 | |
{n,} | 重复n次或更多次 | |
{n,m} | 重复n到m次 |
grep 常用命令:
命令 | 意义 | 样例 |
-i | 忽略大小写 | grep -i ab list.txt |
-v | 不显示匹配行 | grep -v ab list.txt |
-n |
同时输出行号 | grep -n ab list.txt |
-o | 只把每个匹配的内容独立显示 | grep -o ab list.txt |
-A{num} | 同时打印文本结尾后num行 | grep -A2 ab list.txt |
-B{num} | 同时打印文本前面num行 | grep -B2 ab list.txt |
-C{num} | 同时打印文本前后num行 | grep -C2 ab list.txt |
-r dir/ | 递归搜索目录 | |
-m{num} | 匹配匹配中的第num个 | grep -m2 ab list.txt |