grep命令使用
Linux grep 命令用于查找文件里符合条件的字符串。
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。
语法结构
grep 参数 符合文本样式 文件
参数
- -A 10 : 除了显示符合范本样式的那一列之外,并显示该行之后 10 行的内容。
- -B 10 : 除了显示符合样式的那一行之外,并显示该行之前 10 行的内容。
- -C 10 : 除了显示符合样式的那一行之外,并显示该行之前后 10 行的内容。
- -c : 计算符合样式的列数。
- -e <范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
- -i 或 --ignore-case : 忽略字符大小写的差别。
- -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
- -r 或 --recursive : 递归方式查找
- -v 或 --invert-match : 显示不包含匹配文本的所有行。
实例
1、精确查找
查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行
grep test *file
查找 log 日志文件中包含 Exception 字符串的行并展示之后的 3 行内容
grep -A 3 "Exception" waimai-d-search-query-server.log
2、递归查找
以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容
grep -r update /etc/acpi
3、反向查找
前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。查找文件名中包含 test 的文件中不包含test 的行
grep -v test *test*
Linux 里利用 grep 和 find 命令查找文件内容
从文件内容查找匹配指定字符串的行:
$ grep "被查找的字符串" 文件名
例子:在当前目录里第一级文件夹中寻找包含指定字符串的 .in 文件
$ grep "thermcontact" /.in
从文件内容查找与正则表达式匹配的行:
$ grep –e "正则表达式" 文件名
查找时不区分大小写:
$ grep –i "被查找的字符串" 文件名
查找匹配的行数:
$ grep -c "被查找的字符串" 文件名
从文件内容查找不匹配指定字符串的行:
$ grep –v "被查找的字符串" 文件名
从根目录开始查找所有扩展名为 .log 的文本文件,并找出包含 "ERROR" 的行:
$ find / -type f -name "*.log" | xargs grep "ERROR"
例子:从当前目录开始查找所有扩展名为 .in 的文本文件,并找出包含 "thermcontact" 的行:
$ find . -name "*.in" | xargs grep "thermcontact"