介绍

grep命令用于搜索文本关键词,常见于日志搜索等,本文总结一些工作常见的用法。

语法

grep [OPTIONS] PATTERN [FILE...]

常见参数和应用举例

  • -A/-B/-C:用于内容行控制,后面跟一个整数,意思是对于grep的匹配到的行,同时显示该行的上面或下面或上下多少行。-A表示after-context,-B表示before-context,-C表示context。常用于查看日志上下文,一般先用grep搜索关键字,再用grep配合-C选项搜索该关键字对应时间(唯一)的上下文
  • -v:反向匹配,常用于匹配非grep进程,比如 ps -ef | grep -v grep
  • -i:忽略大小写,一般很少用到,除非记不清目标文本大小写了
  • --color:用于显示匹配时关键字颜色,行号等,这个参数一般不需要设置,因为一般在grep别名中已经加了
  • -c:统计匹配到的行数,一行中的多次匹配算一次匹配
  • -o:只输出匹配到的文本,一般用于统计匹配的数量,比如grep -o search_str text.txt | wc -l,与-c选项不同的是,这种方式统计的是关键字出现的次数,而-c统计的是匹配的行数(一行中的多次匹配算一次匹配)
  • -n:用于输出匹配到的关键字出现在第几数
  • -r:对于文件夹搜索,使用递归,比如grep -rn search_str dir_to_search
  • -e:指定一种匹配模式,比如grep -e the -e of test.txt就表示搜索test.txt中the 或 of关键字
  • --include,--exclude,--exclude-dir:指定/排除文件(夹),如:
    • 搜索src目录中.c和.cpp文件中的含有main的行:grep -r "main" ./src --include *.{c,cpp}
    • 搜索src目录中含有main的行,但不搜索readme文件:grep -r "main" ./src --exclude "readme"
    • 搜索src目录中含有main的行,但不搜索.git文件夹:grep -r "main" ./src --exclude-dir ".git"
  • -l:仅输出匹配到的文件,而不是匹配到的内容,如果要输出未匹配到的文件,则使用-L选项。该参数很有用,当你仅仅想知道有哪些文件匹配到了的时候。
  • -Z:对于搜索到的行,按0字符(\0)分隔,常用于xargs传值,如,
    • 删除含有hello字符串的文件:grep -r "hello" ./src -lZ | xargs -0 rm -f
    • 相似0值的用法还有find scripts/ -name '*.py' -print0 | xargs -0 md5sum > md5sum.txt

参考:

https://blog.csdn.net/csyuanA/article/details/75268845

https://cloud.tencent.com/developer/article/1164509