Fork me on GitHub

linux 命令 grep

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

匹配字符串

grep xxx file_name
grep "xxx" file_name

在多个文件中查找

grep "xxx" file_1 file_2 file_3 …

输出除 xxx 之外的所有行

grep -v "xxx" file_name

使用正则表达式

grep -E "[1-9]+" file_name

只输出文件中匹配到的部分

grep -E -o "03-06 14:30" mysqld.log

统计文件或者文本中包含匹配字符串的行数

grep -E -c "03-06 14:30" mysqld.log

输出包含匹配字符串的行号

grep -E -n "03-06 14:30" mysqld.log

打印样式匹配所位于的字符或字节偏移

grep -E -b "03-06 14:30" mysqld.log

-o, -b 经常配合使用

grep -E -b -o "03-06 14:30" mysqld.log

直接使用正则式

以 u 开头的日志
grep ^u mysqld.log
不以 u 开头的日志
grep ^[^u] mysqld.log
" 结尾的日志
grep \"$ mysqld.log
其它正则
grep 'app\.k.*feedback' k2.access.log

搜索多个文件并查找匹配文本在哪些文件中

grep -l "text" file1 file2 file3…

在多级目录中对文本进行递归搜索

grep "text" . -r -n

忽略匹配样式中的字符大小写

grep -i "HELLO" file_name

匹配多项 (|| 的关系)

grep -E "03-06 14:30" mysqld.log | grep -i "incorrect"

在grep搜索结果中包括或者排除指定文件

只在目录中所有的.php和.html文件中递归搜索字符"main()"
grep "main()" . -r --include='*.php' --include='*.html'
在搜索结果中排除所有.log文件
grep -E "03-06 14:30" . -r --exclude='*.log'

打印出匹配文本之前或者之后的行

匹配结果行及之后的3行
grep -i -n "incorrect" -A 3 mysqld.log
匹配结果行及之前的3行
grep -i -n "incorrect" -B 3 mysqld.log
匹配结果行及前后的3行
grep -i -n "incorrect" -C 3 mysqld.log
注:如果匹配结果有多个,会用"--"作为各匹配结果之间的分隔符

只显示第1个匹配结果

grep -i -n -m 1 "incorrect" -A 3 mysqld.log

-------------感谢您的阅读 有问题请留言(或mailto:frostbelt@sina.cn)-------------