news 2025/12/18 3:13:26

Grep 例程大全

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Grep 例程大全

Grep 例程大全

📚 Grep 基础语法

grep [选项] 模式 [文件...] grep [选项] -e 模式1 -e 模式2 [文件...] grep [选项] -f 模式文件 [文件...]

🔧 常用选项

选项说明
-i忽略大小写
-v反向匹配(显示不匹配的行)
-n显示行号
-c统计匹配行数
-l只显示包含匹配的文件名
-L只显示不包含匹配的文件名
-h不显示文件名(多文件时)
-H总是显示文件名
-r递归搜索目录
-R-r,但跟踪符号链接
-w匹配整个单词
-x匹配整行
-o只输出匹配的部分
-q静默模式(不输出)
-s不显示错误信息
-E使用扩展正则表达式
-F固定字符串(禁用正则)
-PPerl正则表达式(功能最强)
-A n显示匹配行及后n行
-B n显示匹配行及前n行
-C n显示匹配行及前后各n行
--color高亮显示匹配部分

🔍 基础搜索

1.简单文本搜索

# 基本搜索 grep "pattern" file.txt # 多个文件 grep "pattern" file1.txt file2.txt # 当前目录所有txt文件 grep "pattern" *.txt # 忽略大小写 grep -i "pattern" file.txt # 显示行号 grep -n "pattern" file.txt

2.递归搜索

# 递归搜索当前目录 grep -r "pattern" . # 递归搜索,只显示文件名 grep -rl "pattern" . # 递归搜索特定类型文件 grep -r "pattern" --include="*.py" . grep -r "pattern" --include="*.{py,js}" . # 排除某些目录 grep -r "pattern" --exclude-dir={.git,node_modules} . grep -r "pattern" --exclude-dir=.git --exclude-dir=node_modules .

📝 模式匹配

1.基本正则表达式

# 任意单个字符 grep "a.b" file.txt # a后跟任意字符再跟b # 行首 grep "^start" file.txt # 行尾 grep "end$" file.txt # 空行 grep "^$" file.txt # 包含空格的行 grep "[[:space:]]" file.txt # 数字 grep "[0-9]" file.txt grep "[[:digit:]]" file.txt # 字母 grep "[a-zA-Z]" file.txt grep "[[:alpha:]]" file.txt # 单词字符(字母、数字、下划线) grep "[[:alnum:]_]" file.txt grep "\w" file.txt # 需要 -P 或 -E

2.扩展正则表达式(-E)

# 使用扩展正则 grep -E "pattern1|pattern2" file.txt grep -E "(abc|def)" file.txt # 量词 grep -E "a{3}" file.txt # 3个a grep -E "a{3,5}" file.txt # 3-5个a grep -E "a{3,}" file.txt # 至少3个a grep -E "a+" file.txt # 1个或多个a grep -E "a*" file.txt # 0个或多个a grep -E "a?" file.txt # 0个或1个a # 分组 grep -E "(abc)+" file.txt # abc出现一次或多次

3.Perl正则表达式(-P)

# 使用Perl正则(功能最强) grep -P "\d+" file.txt # 数字 grep -P "\s+" file.txt # 空白字符 grep -P "\w+" file.txt # 单词字符 grep -P "\bword\b" file.txt # 单词边界 # 非贪婪匹配 grep -P "a.*?b" file.txt # 匹配最短的a...b # 向前向后查找 grep -P "abc(?=def)" file.txt # 匹配后面是def的abc grep -P "(?<=abc)def" file.txt # 匹配前面是abc的def grep -P "abc(?!def)" file.txt # 匹配后面不是def的abc grep -P "(?<!abc)def" file.txt # 匹配前面不是abc的def

🎯 精确匹配

1.单词匹配

# 全单词匹配(-w) grep -w "word" file.txt # 匹配 "word",不匹配 "words" grep -w "is" file.txt # 匹配 "is",不匹配 "this" # 整行匹配(-x) grep -x "exact line" file.txt # 只匹配完全相同的行

2.固定字符串(-F)

# 禁用正则,按字面搜索 grep -F "a.b" file.txt # 搜索 "a.b",不把 . 当通配符 grep -F ".*" file.txt # 搜索 ".*",不匹配任意字符 # 搜索特殊字符 grep -F "$PATH" file.txt # 搜索 "$PATH" grep -F "[test]" file.txt # 搜索 "[test]"

📊 上下文显示

1.显示上下文

# 显示匹配行及后2行 grep -A 2 "pattern" file.txt # 显示匹配行及前2行 grep -B 2 "pattern" file.txt # 显示匹配行及前后各2行 grep -C 2 "pattern" file.txt # 组合使用 grep -A 1 -B 1 "pattern" file.txt # 前后各1行 # 带行号 grep -n -C 2 "pattern" file.txt

2.只显示匹配部分

# 只输出匹配的部分(-o) grep -o "pattern" file.txt # 统计每个匹配的数量 grep -o "pattern" file.txt | wc -l # 提取IP地址 grep -o -E "([0-9]{1,3}\.){3}[0-9]{1,3}" file.txt # 提取邮箱 grep -o -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" file.txt

🔄 组合使用

1.管道组合

# 统计出现频率 grep -o "pattern" file.txt | sort | uniq -c | sort -nr # 过滤ps输出 ps aux | grep "python" | grep -v "grep" # 搜索压缩文件 zgrep "pattern" file.gz bzcat file.bz2 | grep "pattern" # 多级过滤 grep "error" log.txt | grep -v "warning" | grep -n "fatal"

2.多模式匹配

# 使用 -e 指定多个模式 grep -e "pattern1" -e "pattern2" file.txt # 使用 -f 从文件读取模式 grep -f patterns.txt file.txt # 同时使用多个选项 grep -rin "error" --include="*.log" .

📈 统计和过滤

1.统计功能

# 统计匹配行数 grep -c "pattern" file.txt # 统计多个文件的匹配总数 grep -c "pattern" *.txt # 统计匹配次数(-o配合wc) grep -o "pattern" file.txt | wc -l # 显示匹配的文件名 grep -l "pattern" *.txt # 显示不匹配的文件名 grep -L "pattern" *.txt

2.过滤排除

# 排除特定模式 grep -v "exclude" file.txt # 排除多个模式 grep -v -e "pattern1" -e "pattern2" file.txt # 排除空行和注释 grep -v "^$" file.txt | grep -v "^#" # 排除目录 grep -r "pattern" . --exclude-dir=.git --exclude-dir=node_modules # 排除文件类型 grep -r "pattern" . --exclude="*.min.js" --exclude="*.min.css"

🛠️ 实用例程

1.日志分析

# 提取特定时间段的日志 grep "2024-01-15 1[0-2]:" access.log # 查找错误和警告 grep -E "(ERROR|WARN|FATAL)" app.log # 查找HTTP状态码 grep -E "HTTP/1\.[01]\" [4-5][0-9][0-9]" access.log # 统计IP访问次数 grep -o -E "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log | sort | uniq -c | sort -nr # 查找慢查询(>5秒) grep "execution time: [5-9][0-9][0-9][0-9]" db.log

2.代码搜索

# 查找函数定义 grep -n "def " *.py grep -n "function " *.js # 查找TODO/FIXME注释 grep -r -n "TODO\|FIXME\|XXX" --include="*.{py,js,jsx,ts,tsx}" . # 查找未使用的导入(Python) grep -r "import " *.py | grep -v "^\s*#" | cut -d: -f2 | sort | uniq # 查找console.log(调试语句) grep -r "console\.log\|print(" --include="*.{js,py}" . # 查找硬编码的字符串 grep -r '"\(password\|secret\|key\)"' --include="*.py" .

3.配置文件处理

# 查找有效配置(非注释行) grep -v "^#" config.conf | grep -v "^$" # 查找特定配置项 grep -E "^[[:space:]]*server_name" nginx.conf # 查找环境变量定义 grep -E "^export [A-Z_]+=" .bashrc # 检查重复配置 grep -E "^[[:space:]]*[a-zA-Z]" config.conf | sort | uniq -d

4.系统管理

# 查找运行中的进程 ps aux | grep "[a]pache" # 技巧:用 [] 排除grep自身 ps aux | grep -i "mysql" # 查找特定用户进程 ps aux | grep "^username" # 查找大文件 find . -type f -size +100M | grep -v ".git" # 检查端口占用 netstat -tulpn | grep ":80" # 查找特定权限的文件 ls -la | grep "^d[rwx-]\{9\}.*root"

5.数据处理

# 提取CSV特定列(第3列为"error"的行) awk -F',' '$3 == "error"' file.csv | grep "pattern" # 提取JSON值(简单情况) grep -o '"name":"[^"]*"' data.json # 提取XML标签内容 grep -o '<title>[^<]*</title>' file.xml # 提取URL grep -o -E "https?://[a-zA-Z0-9./?=_%:-]*" file.txt # 提取版本号 grep -o -E "[0-9]+\.[0-9]+(\.[0-9]+)?" file.txt

🎪 高级技巧

1.彩色输出

# 启用颜色(默认自动检测) grep --color=auto "pattern" file.txt # 强制启用颜色 grep --color=always "pattern" file.txt | less -R # 自定义颜色 GREP_COLORS='mt=01;31' grep "pattern" file.txt # 红色粗体 # 可用颜色: mt=匹配文本, ms=选择匹配, mc=上下文匹配, sl=选择行, cx=上下文行, rv=反转视频, fn=文件名, ln=行号, bn=字节偏移, se=分隔符

2.二进制文件处理

# 在二进制文件中搜索文本 grep -a "text" binary_file # 搜索时忽略二进制文件 grep -I "pattern" * # 等价于 --binary-files=without-match # 强制当作文本处理 grep --binary-files=text "pattern" file

3.多字节字符支持

# 处理UTF-8等编码 grep -P "[\x{4e00}-\x{9fff}]" file.txt # 匹配中文字符 grep -P "[\p{Han}]" file.txt # 匹配汉字(Perl类) # Unicode字符类 grep -P "\p{L}" file.txt # 任何字母 grep -P "\p{N}" file.txt # 任何数字 grep -P "\p{P}" file.txt # 任何标点

4.性能优化

# 快速搜索(固定字符串) grep -F "exact_string" large_file.txt # 限制搜索深度 grep -r --max-depth=2 "pattern" . # 使用fgrep(固定字符串grep) fgrep "fixed_string" file.txt # 并行搜索(使用GNU parallel) find . -name "*.log" -type f | parallel grep -H "pattern" {}

📋 实用单行命令

1.文件处理

# 删除空行 grep -v "^$" file.txt > newfile.txt # 提取注释 grep "^#" config.conf > comments.txt # 提取非注释配置 grep -v "^#" config.conf | grep -v "^$" > clean_config.conf # 查找重复行 grep -n "^.*$" file.txt | sort -k2 | uniq -df1 # 统计单词出现次数 grep -o -w "word" file.txt | wc -l

2.网络和安全

# 查找SSH登录尝试 grep "Failed password" /var/log/auth.log # 查找可疑活动 grep -E "(invalid user|authentication failure)" /var/log/secure # 提取访问IP grep -o -E "([0-9]{1,3}\.){3}[0-9]{1,3}" /var/log/nginx/access.log | sort | uniq # 查找明文密码 grep -r -i "password[[:space:]]*=" --include="*.{py,js,json,yml,yaml}" .

3.开发调试

# 查找未捕获的异常 grep -r "except:" --include="*.py" . | grep -v "#" # 查找print语句(调试残留) grep -r "print(" --include="*.py" . # 查找过长的行(>80字符) grep -n "^.\{81,\}$" *.py # 查找魔法数字 grep -r -E "\b[0-9]{3,}\b" --include="*.{py,js,java}" .

🎓 组合工具

1.与 find 组合

# 查找包含文本的文件 find . -name "*.txt" -exec grep -l "pattern" {} \; # 查找并处理 find . -type f -name "*.log" -exec grep -H "error" {} \; # 使用xargs提高性能 find . -name "*.py" -type f | xargs grep -l "import os"

2.与 sed/awk 组合

# 提取后处理 grep "pattern" file.txt | awk '{print $1, $3}' # 替换匹配内容 grep -l "old_pattern" *.txt | xargs sed -i 's/old_pattern/new_pattern/g' # 统计列数据 grep "success" log.txt | awk '{sum += $3} END {print sum}'

3.与 sort/uniq 组合

# 统计频率 grep -o "pattern" file.txt | sort | uniq -c | sort -nr # 去重匹配 grep -h "pattern" *.log | sort -u # 查找共同行 grep -f file1.txt file2.txt | sort

📚 特殊技巧

1.排除自身

# 搜索进程时排除grep自身 ps aux | grep "[p]ython" # 技巧!匹配 "python" 但 "[p]ython" 不匹配自身 ps aux | grep "python" | grep -v "grep" # 传统方法 # 原因:[p]ython 匹配 "python",但 "grep [p]ython" 不匹配

2.多个文件类型

# 搜索多种文件 grep -r "pattern" --include="*.cpp" --include="*.h" . # 使用glob模式 grep -r "pattern" --include="*.{cpp,h,cc}" . # 排除多种文件 grep -r "pattern" --exclude="*.min.js" --exclude="*.min.css" .

3.行号技巧

# 显示匹配行及前后范围 grep -n -C 3 "pattern" file.txt # 只显示行号 grep -n "pattern" file.txt | cut -d: -f1 # 显示行号范围 grep -n "pattern" file.txt | awk -F: '{print $1}' | paste -sd,

⚠️ 注意事项

1.正则表达式差异

# 基本正则 vs 扩展正则 grep "a\{3\}" file.txt # 基本正则,需要转义{} grep -E "a{3}" file.txt # 扩展正则,不需要转义 grep -P "a{3}" file.txt # Perl正则,不需要转义 # 常见元字符转义 grep "\.txt$" file.txt # 转义点号匹配 ".txt" grep -F ".txt" file.txt # 或使用固定字符串

2.性能考虑

# 大文件搜索技巧 grep -m 10 "pattern" large.log # 找到10个匹配后停止 # 使用更快的算法 grep -F "string" large.txt # 固定字符串比正则快 # 避免不必要的递归 grep -r --exclude-dir=.git "pattern" .

3.编码问题

# 处理不同编码 grep -a "pattern" file # 当作文本处理 grep -U "pattern" file # 处理Windows换行符 grep --unicode-mode "pattern" file # Unicode模式 # 设置语言环境 LANG=C grep "pattern" file # 使用C语言环境(最快)

📖 速查表

常用模式

模式说明示例
^行首^start
$行尾end$
.任意单个字符a.b
*0次或多次a*b
+1次或多次(需-E)a+b
?0次或1次(需-E)a?b
{n}恰好n次(需-E)a{3}
{n,}至少n次(需-E)a{3,}
{n,m}n到m次(需-E)a{3,5}
[abc]字符集[aeiou]
[^abc]否定字符集[^0-9]
|或(需-E)cat|dog
\(\)分组(基础)\(ab\)+
()分组(扩展)(ab)+(需-E)

字符类

等价说明
[[:alnum:]][a-zA-Z0-9]字母数字
[[:alpha:]][a-zA-Z]字母
[[:digit:]][0-9]数字
[[:lower:]][a-z]小写字母
[[:upper:]][A-Z]大写字母
[[:space:]][ \t\r\n\v\f]空白字符
[[:blank:]][ \t]空格和制表符
[[:punct:]][!"#$%&'()*+,./:;<=>?@[\]^_{|}~-]`标点符号
[[:graph:]][[:alnum:][:punct:]]可见字符
[[:print:]][[:alnum:][:punct:] ]可打印字符
[[:cntrl:]][\x00-\x1F\x7F]控制字符
[[:xdigit:]][0-9a-fA-F]十六进制数字

这个大全涵盖了 grep 的绝大多数用法,从基础搜索到高级技巧都有示例。掌握这些例程,你就能高效地处理文本搜索的各种需求!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/14 17:16:42

基于vue的宠物之家领养系系统_aj6wa9kt_springboot php python nodejs

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华
网站建设 2025/12/14 17:14:50

实习面试题-Zookeeper 面试题

1.什么是 ZooKeeper?它的主要作用有哪些? 回答重点 ZooKeeper 是一种开源分布式协调服务,用于管理大型分布式系统中的配置、同步以及命名等信息。它通过提供一个简单的原语集合来帮助开发人员设计更加可靠和分布式的系统架构。 ZooKeeper 的主要作用包括: 1)集中配置管…

作者头像 李华
网站建设 2025/12/14 17:12:47

wangEditor粘贴ppt母版样式自动适配网页

集团Word导入产品选型与开发全流程记录 一、需求背景与目标 作为一家业务覆盖教育、政府、金融等多领域的集团企业&#xff0c;我们面临跨行业文档处理的核心痛点&#xff1a;子公司每月需处理数万份含复杂排版的Word文档&#xff0c;其中教育行业涉及实验报告模板、政府领域…

作者头像 李华
网站建设 2025/12/14 17:11:36

JAVA中如何利用JSP实现百万文件上传?

大文件传输解决方案建议书 一、需求分析与技术挑战 作为福建IT行业软件公司项目负责人&#xff0c;针对贵司提出的大文件传输需求&#xff0c;我进行了全面分析&#xff0c;发现以下几个核心挑战&#xff1a; 超大文件传输稳定性&#xff1a;单文件100G的传输及断点续传文件…

作者头像 李华