grep - 搜索和过滤文本
grep 在文件或标准输入中搜索与模式匹配的行。
常用参数
-i、--ignore-case:忽略大小写。-c、--count:只输出匹配行数量。-l、--files-with-matches:只输出包含匹配内容的文件名。-n、--line-number:显示行号。-h、--no-filename:搜索多个文件时不显示文件名。-s、--no-messages:不显示无法读取文件等错误信息。-v、--invert-match:输出不匹配的行。-w、--word-regexp:匹配完整单词。-x、--line-regexp:匹配整行。-r、--recursive:递归搜索目录。-q、--quiet:不输出内容,只通过退出状态表示是否匹配。-o、--only-matching:只输出匹配到的部分。-F、--fixed-strings:把模式视为普通字符串。-E、--extended-regexp:使用扩展正则表达式。-f FILE、--file=FILE:从文件逐行读取搜索模式。-A N:额外显示匹配行之后N行。-B N:额外显示匹配行之前N行。-C N:额外显示匹配行前后各N行。
使用示例
# 搜索并显示行号
grep -n 'error' application.log
# 忽略大小写
grep -i 'warning' application.log
# 输出不包含小写字母的行
grep -v '[a-z]' filename
# 匹配多个条件
grep -E 'error|warning' application.log
# 按普通字符串匹配,避免特殊字符被解释为正则表达式
grep -F 'a.b[c]' filename
# 递归搜索 Markdown 文件
grep -rn --include='*.md' 'keyword' notes/显示上下文
# 显示匹配行前后各一行
grep -C 1 'Error' application.log
# 显示匹配行之后两行
grep -A 2 'Error' application.log从文件读取多个模式
patterns.txt 每行放一个搜索模式:
error
warning
timeoutgrep -f patterns.txt application.log这表示使用文件中的全部模式进行搜索,不是比较两个文件的交集。
在脚本中判断是否匹配
if grep -qF 'ready' status.txt; then
printf '%s\n' '已就绪'
fi