美文网首页
Linux下的文本过滤神器-grep

Linux下的文本过滤神器-grep

作者: 狗肉是只猫 | 来源:发表于2020-04-13 23:16 被阅读0次

    1. grep简介

    grep是Linux中用来过滤文本文件内容的命令,使用该命令能够高效的从文本信息中过滤出符合条件的文件行。

    grep 与 awk 、sed并称为linux下文本处理三剑客,grep用于过滤文本信息,sed用于动态编辑文本,awk用于格式化输出文本。

    2. 命令格式

    第一种用法:从已存在文件中过滤并输出文本信息

    grep [选项] [表达式] [文件路径]...

    第二种用法:过滤管道中获取到的文本信息

    otherCommand | grep [选项] [表达式]

    3. 可用选项

    选项 含义
    -v 反向过滤,不展示过滤项信息
    -i 过滤时忽略大小写
    -n 显示行号(显示的是文本中的行号)
    -r 递归搜索,传递文件路径是文件夹时,递归处理下面所有符合条件的所有文本
    -E 支持扩展后的正则表达式,加上 -E参数后,实际等同于egrep命令
    -F 不按正则表达式进行匹配,按照字符串字面进行匹配
    -c 只展示匹配到的总行数
    -w 匹配整词,词语间以空格划分
    -x 匹配整行,行之间以换行符划分
    -l 只显示匹配到的文件名称,不显示内容
    -s 不显示错误信息

    4. 场景实操

    # 过滤tmpfile1、tmpfile2中包含login字符的行
    grep login tmpfile1 tmpfile2
    
    # 过滤tmpfile开头的文件中,包含login字符(忽略大小写)的行
    grep -i login tmpfile*
    
    # 过滤出以log结尾的文件中,不包含debug字符的行,反向过滤
    grep -v debug *.log
    
    # 过滤出以log结尾的文件中,包含login字符(忽略大小写)的行,并打印出行号
    grep -i -n login *.log
    
    # 扩展正则表达式的支持,同时匹配 login、debug两个关键字,不加-E的话,不支持扩展表达式
    grep -E 'login|debug' *.log
    
    # 非正则表达式匹配,过滤出以log结尾的文件中,包含 debug.* 字符的行
    grep -F 'debug.*' *.log
    
    # 过滤 /log下文件中所有文件中包含 error的行
    grep -r 'error' /log/
    
    # 只输出以log结尾的文件中,包含error字符的行数
    grep -c error *.log
    
    # 匹配log结尾的文件中,包含login单词的行,login匹配到,不匹配loginInfo等
    grep -w login *.log
    
    # 匹配log结尾的文件中,等于love的行,整行匹配
    grep -x love *.log
    
    # 实时打印以log结尾的日志文件,过滤包含关键词error的行
    tail -f *.log | grep error
    

    相关文章

      网友评论

          本文标题:Linux下的文本过滤神器-grep

          本文链接:https://www.haomeiwen.com/subject/qzxamhtx.html