Linux grep与正则表达式示例代码

 更新时间:2026年07月09日 08:39:15   作者:十间鱼  
grep是Linux中用于处理文件的工具之一,grep搜索输入文件,查找与正则表达式匹配的行,并将每个匹配的行标准输出,这篇文章主要介绍了Linux grep与正则表达式的相关资料,需要的朋友可以参考下

前言

grep (Global Regular Expression Print) 是 Linux 中最强大的文本搜索工具,配合正则表达式可以实现复杂的文本匹配。

一、基本用法

1. 基础搜索格式

grep [选项] "模式" 文件名

2. 常用选项

选项说明
-i忽略大小写
-v反向匹配(显示不匹配的行)
-n显示行号
-c统计匹配行数
-l只显示包含匹配项的文件名
-L显示不包含匹配项的文件名
-r/-R递归搜索目录
-w全词匹配
-A num显示匹配行及后面num行
-B num显示匹配行及前面num行
-C num显示匹配行及前后各num行

二、正则表达式元字符详解

1. 基本匹配

模式匹配内容
.任意单个字符
[abc]a、b或c
[^abc]非a、b、c的字符
[a-z]a到z任意小写字母
\w单词字符(字母、数字、下划线)
\W非单词字符
\s空白字符(空格、制表符等)
\S非空白字符
\d数字([0-9])
\D非数字

2. 数量限定

模式匹配次数
*0次或多次
+1次或多次(ERE/PCRE)
?0次或1次
{n}恰好n次
{n,}至少n次
{n,m}n到m次

3. 位置锚定

模式匹配位置
^行首
$行尾
\<单词开头
\>单词结尾
\b单词边界

4. 分组与或

模式功能
(pattern)分组捕获
(?:pattern)非捕获分组
`ab`匹配a或b

三、实用示例

1. 基础搜索

# 搜索包含"error"的行(区分大小写)
grep "error" log.txt

# 忽略大小写搜索
grep -i "error" log.txt

# 统计"warning"出现次数
grep -c "warning" *.log

2. 复杂正则匹配

# 搜索包含"error"的行(区分大小写)
grep "error" log.txt
# 忽略大小写搜索
grep -i "error" log.txt
# 统计"warning"出现次数
grep -c "warning" *.log

3. 上下文显示

# 显示匹配行及前后2行
grep -C 2 "critical error" system.log
# 显示匹配行之后的5行
grep -A 5 "Exception" app.log

4. 递归搜索

# 递归搜索目录中的Python文件
grep -rn "import requests" /project/
# 只显示文件名
grep -rl "TODO" src/

四、性能优化技巧

  1. 固定字符串搜索:使用 -F 加速纯文本搜索

    grep -F "fixed-string" largefile.log

1. 默认行为:正则表达式匹配

  • 没有 -F 选项时grep 默认使用 正则表达式 来匹配文本。这意味着每个搜索的字符串都需要通过正则表达式引擎进行解析和匹配。正则表达式支持复杂的模式(如字符集、量词、特殊字符等),因此 grep 需要解析和处理这些表达式来匹配目标文本。

  • 这种正则表达式匹配通常比直接查找一个简单的固定字符串要慢,尤其是当正则表达式较复杂时,计算量会大大增加。

2. 使用 -F 选项时:固定字符串匹配

  • grep -F 选项告诉 grep 进行 固定字符串匹配,即不使用正则表达式引擎,而是将搜索模式当作一个普通的固定字符串来处理。

  • 在这种模式下,grep 只需要将目标字符串与文本逐字符进行比较。没有正则表达式的复杂处理,因此能够更高效地执行搜索

2.限制搜索深度:结合 find 控制递归深度

find . -maxdepth 3 -type f -exec grep "pattern" {} +
  • -type f:

    • -type f 选项告诉 find 只查找普通文件(f 代表 "file")。这样可以排除目录、符号链接、设备文件等非普通文件。
  • -exec:

    • -exec 选项允许你对 find 查找到的每个文件执行指定的命令。在这里,它表示对找到的每个普通文件执行后续的 grep 命令。
  • grep "pattern":

    • grep "pattern" 是一个常见的命令,表示在文件中搜索指定的字符串或模式。这里 pattern 是你要查找的内容,grep 会检查每个文件是否包含该模式。
  • {}:

    • {}find 命令中的占位符,它会被当前 find 命令找到的每个文件路径替代。也就是说,{} 会被每个普通文件的路径所替代,从而在每个文件上执行 grep "pattern"
  • +:

    • + 表示“批量处理”,它告诉 find 将找到的多个文件一起传递给 grep 命令,而不是对每个文件单独执行一次 grep。这样,grep 会一次性处理所有符合条件的文件,性能上比逐个执行 grep 高效得多。

3.排除目录

grep -r --exclude-dir={.git,node_modules} "pattern" .

六、常见问题解决

#grep 默认使用BRE,需要转义部分元字符
grep "a\{2\}" file.txt  # 匹配aa 
grep -E "a{2}" file.txt  # 不需要转义
#二进制文件警告:
grep -a "text" binary.file  # -a 将二进制文件当文本处理
grep --color=auto "pattern" file  # 强制颜色显示

总结

到此这篇关于Linux grep与正则表达式的文章就介绍到这了,更多相关grep与正则表达式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Shell字符串截取的实现方法(非常详细)

    Shell字符串截取的实现方法(非常详细)

    这篇文章主要介绍了Shell字符串截取的实现方法(非常详细),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • HBASE 常用shell命令,增删改查方法

    HBASE 常用shell命令,增删改查方法

    今天小编就为大家分享一篇HBASE 常用shell命令,增删改查方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • pidof命令获取不到程序的pid问题解决

    pidof命令获取不到程序的pid问题解决

    这篇文章主要为大家介绍了pidof命令获取不到程序的pid问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Shell程序退出状态码的命令详解

    Shell程序退出状态码的命令详解

    在本篇文章当中主要给大家介绍一个shell的小知识——状态码。这是当我们的程序退出的时候,子进程会将自己程序的退出码传递给父进程,有时候我们可以利用这一操作做一些进程退出之后的事情,比如当程序执行失败或者被某个信号杀死我们就可以了解到,然后做出对应的措施
    2022-10-10
  • Linux shell知识点汇总

    Linux shell知识点汇总

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。
    2015-08-08
  • python实现Linux异步epoll代码

    python实现Linux异步epoll代码

    本文提供了python实现Linux异步epoll的代码,供大家参考使用,希望对你有帮助
    2013-11-11
  • 浅析Shell中的定时任务 crontab

    浅析Shell中的定时任务 crontab

    crondtab进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。这篇文章主要介绍了Shell中的定时任务 crontab,需要的朋友可以参考下
    2019-12-12
  • linux下非root用户运行tomcat

    linux下非root用户运行tomcat

    这篇文章主要介绍了linux下非root用户运行tomcat ,需要的朋友可以参考下
    2017-12-12
  • 收集的48个Shell脚本小技巧

    收集的48个Shell脚本小技巧

    这篇文章主要介绍了收集的48个Shell脚本小技巧,涵盖方方面面,比如获取CPU信息、VI技巧、正则表达式等等,需要的朋友可以参考下
    2014-08-08
  • shell脚本语言之if条件判断语句实例详解

    shell脚本语言之if条件判断语句实例详解

    在写shell脚本的时候条件判断是最常用到的,尤其刚写shell脚本的时候,一些高级命令语法不会使用,到处都是if,下面这篇文章主要给大家介绍了关于shell脚本语言之if条件判断语句的相关资料,需要的朋友可以参考下
    2022-04-04

最新评论