Grep 文本搜索
Grep 命令是 linux 中的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Grep 可在一个或多个文件中搜素匹配字符串(模板),如果匹配字符串包括空格,则必须被引用,匹配字符串后的所有字符串被看作文件名。搜索的结果被送到标准输出(stdout),搜索动作不改变原文件的内容。
Grep 命令的命令格式:
grep [option] pattern files
1、选项 option
参数选项 | 解释说明 |
-c | 只统计匹配的行数 |
-v | 排除匹配结果 |
-n | 显示匹配行与行号 |
-i | 不区分大小写 |
-E | 使用egrep命令 |
-color = auto | 为grep过滤结果添加颜色 |
-w | 只匹配过滤的单词 |
-o | 只输出匹配的内容 |
2、字符串模板 pattern
Pattern 为正则表达式,使用 regex 规则的字符串模板:-? : 同时显示匹配行的上下第 ?行,如:grep -n -2 hello test.md 表示除显示有 hello 的行外,还显示其上、下其他两行;
^ : 匹配正则表达式的以“某字符串”开头的行,如:grep "^int" test.md 表示显示所有 int 开头的行;
$ : 匹配正则表达式的以“某字符串”结尾的行,如:grep ");$" test.md 表示显示所有 ); 结尾的行;
< : 从匹配正则表达式的行开始显示,如:grep "\
[ ] : 单个字符匹配,如:grep [a] test.md 找出包含 a 的所有行;
[^ ] : 显示不包括某字符,如:grep [^n] test.md 找出不包含 n 字母的所有行;
[ - ] : 范围匹配,如 grep [A-C] test.md ,即A、B、C都符合要求;如 grep [a,b] test.md ,即只有a和b符合要求;
常用的正则表达式还有:
[:alnum:] 字母数字集 “a-z A-Z 0-9”
[:alpha:] 字母集合 “a-z A-Z”
[:blank:] 空格或制表键
[:cntrl:] 任何控制字符
[:digit:] 数字集合 “0-9”
[:graph:] 任何可视字符(无空格)
[:lower:] 小写字母 “a-z”
[:print:] 非控制字符
[:punct:] 标点字符
[:space:] 空格
[:upper:] 大写字母 “A-Z”
[:xdigit:] 十六进制数字 “0-9 a-f A-F”
3、文件名 files
Files 可以是一个文件名,也可以是多个文件名,如:grep [^heiha] file1.md file2.md file3.md
从3个文件中找出 heiha 开头的行。4、从目录找文件
在指定目录所有文件搜索关键字,并显示文件名,此时 files 为目录名。如:
grep -r "heiha" .
从当前目录找出文件名中包含 heiha 的文件。
5、与管道配合使用
与管道配合,可从其他指令输出的内容中查找内容,如:
cat logic-server.log | grep ERR
从逻辑服日志中,查找错误信息行内容
ps -ef | grep node
从当前应用进程中,查找node.js相关进程
grep -r "heiha" .
cat logic-server.log | grep ERR
ps -ef | grep node