• Linux 常用命令(grep)


    grep

    Linux grep 命令作为文本处理三剑客的一员(另外两个是 sed 和 awk),常用于查询一个或多个文件中符合条件的字符串。

    基本语法示例:

    grep [选项] 模式 文件名
    

    grep 命令常用的参数说明:

    参数 等效参数 说明
    -a --text 不忽略二进制数据
    -A <显示行数> --after-context=<显示行数> 除了显示符合条件的行之外,并显示该行之后 N 行的内容
    -b --byte-offset 在显示符合条件的行之前,该行中匹配的第一个字符在全文中的位置
    -B <显示行数> --before-context=<显示行数> 除了显示符合条件的行之外,并显示该行之前 N 行的内容
    -c --count 统计符合匹配条件的个数
    -C <显示行数> --context=<显示行数> 或 -<显示行数> 除了显示符合条件的行之外,并显示该行之前或之后 N 行的内容
    -d <动作> --directories=<动作> 当指定要查找的是目录而非文件时,必须使用该参数
    -e <范本样式> --regexp=<范本样式> 指定字符串做为查找条件
    -E <范本样式> --extended-regexp=<范本样式> 查找条件支持使用正则表达式
    -f <规则文件> --file=<规则文件> 指定规则文件,用于匹配多个样式,规则文件每行一个规则样式
    -F --fixed-regexp 将样式视为固定字符串的列表
    -G --basic-regexp 将样式视为普通的表示法来使用
    -h --no-filename 在显示符合样式的那一行之前,不标识该行所属的文件名称
    -H --with-filename 在显示符合样式的那一行之前,标识该行所属的文件名称
    -i --ignore-case 忽略字符大小写
    -l --file-with-matches 列出文件内容符合指定的样式的文件名称
    -L --files-without-match 列出文件内容不符合指定的样式的文件名称
    -n --line-number 在显示符合样式的那一行所在的行号
    -o --only-matching 只显示满足匹配条件的部分内容
    -P --perl-regexp 查找条件支持使用 Perl 正则表达式,-E 加强版
    -q --quiet 或 --silent 不显示任何信息
    -r --recursive 此参数的效果和指定 "-d recurse" 参数相同
    -s --no-messages 不显示错误信息
    -v --invert-match 显示不包含匹配文本的所有行
    -V --version 显示版本信息
    -w --word-regexp 只显示全字符合的列
    -x --line-regexp 只显示全列符合的列
    -y / 此参数的效果和指定 "-i" 参数相同

    grep 命令常用的正则表达式说明:

    正则符号 说明 示例 示例说明
    ^ 匹配开头 ^grep 匹配以 grep 开头
    $ 匹配结尾 grep$ 匹配以 grep 结尾
    . 匹配一个非换行符的字符 gr.p 匹配 gr + 任意字符 + p 格式的内容
    * 匹配零个或多个先前字符 *grep 匹配所有一个或多个空格后紧跟 grep 的行
    .* 匹配任意字符 grep.* 匹配包含 grep 的任意字符
    [] 匹配限制范围内的字符 [a-zA-Z0-9] 或 [aA] 匹配属于数字,字母范围内的字符
    [^] 匹配不在限制范围内的字符 [^a-zA-Z0-9] 匹配不属于数字,字母范围内的字符
    \(..\) 标记匹配字符 \(grep\) grep 将被标记为 1
    x{m\} 匹配重复字符 x,m 次 o\{5\} 匹配包含 5 个 o 的行
    x\{m,\} 匹配重复字符 x,至少 m 次 o\{5,\} 匹配包含至少 5 个 o 的行
    x\{m,n\} 匹配重复字符 x,至少 m 次,不多于 n 次 o\{5,10\} 匹配包含 5-10 个 o 的行
    \d 匹配数字 \d+ 匹配任意数字
    \w 匹配文字和数字字符,相当于 [A-Za-z0-9] / /
    \W \w 取反,匹配一个或多个非单词字符,如点,句号等 / /
    \b 单词锁定 \bgrep\b 只匹配 grep

    使用示例

    1. 在文件中搜索关键字的行,支持多个文件:
    # 多个文件直接加在后面,使用逗号隔开
    grep "POST" access.log anaconda-ks.cfg
    

    如图所示:

    多个文件会在开头显示对应的文件名,可以使用 -h 不显示文件名。


    1. -A,显示匹配行并带上后面多少行:
    grep -A 1 "POST" access.log
    

    如图所示:

    下一条 GET 请求的日志就是通过 -A 输出的。


    1. -b,显示匹配的内容在全文中的位置(首位的位置):


    1. -B,显示匹配行并带上前面多少行(和 -A 相反,类似功能的还有 -C 参数):
    grep -B 1 "POST" access.log
    

    如如所示:


    1. -c,统计匹配出现的次数:
    grep -c "POST" access.log
    

    如图所示:


    1. -d,查找的是目录则必须使用该参数(-r 可以替代):
    grep -d recurse "POST" /root/
    

    如图所示:

    -d 参数支持三个值:read,recurse,skip。-d recurse 可以直接使用 -r 代替。


    1. -E,简单的正则表达式:
    grep -E "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" access.log
    
    # 多个条件可以使用 |(或)
    grep -E "Android|iPhone" access.log
    

    如图所示:


    1. -f,匹配多个:

    创建一个 demo.txt 内容如下:

    [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+
    Linux
    Windows
    

    执行匹配:

    grep -E -f demo.txt access.log
    

    如图所示:


    1. -i,忽略大小写:
    grep -i "iphone" access.log
    

    如图所示:


    1. -l,列出满足匹配的文件名称(-L 相反)
    grep -l -d recurse "POST" /root/
    

    如图所示:


    1. -n,显示匹配的行号:
    grep -n "iPhone" access.log
    

    如图所示:


    1. -o,只显示匹配的字符:
    grep -o -E "iP[a-z]+e" access.log
    

    如图所示:


    1. -P,使用 Perl 正则表达式,相当于 -E 的加强版:
    grep -P "\d{1,4}\.\d{1,4}\.\d{1,4}\.\d{1,4}" access.log
    

    如图所示:


    1. -v,输出除了关键字之外的所有行:
    grep -v "POST" access.log
    

    如图所示:

    特殊用法

    1. 递归查询目录中满足匹配条件的文件,并打印文件名和所处的行数:
    grep -r -n "text" /root/
    

    如图所示:


    1. 指定和排除文件类型:
    # 递归限制查询的文件类型
    grep -r "POST" /root/ --include *.{log,html}
    
    # 递归排除查询的文件类型
    grep -r "POST" /root/ --exclude *.{log,html}
    

    如图所示:


    1. 和其它命令配合使用:
    # 配合 find 使用
    find . -name "*.log" | xargs grep -n "POST"
    
    # 配合 echo 使用
    echo "Hello World" | grep -b -o "W"
    
    # 配合 cat 使用
    cat access.log | grep "iPhone"
    
  • 相关阅读:
    [JSOI2010]满汉全席 2sat
    (转)MongoDB实战开发 【零基础学习,附完整Asp.net示例】
    (转)ASP.NET的Cookie跨域问题
    (转)发一个自己写的账号管理软件
    (转)Silverlight学习点滴之一——使用WCF RIA构建应用
    (转)再议依赖注入
    (转)【探索发现】winform 网络传输时候封包与解包心得
    (转)使用Entity Framework和WCF Ria Services开发SilverLight之1:简单模型
    (转)LINQ to Entities 多条件动态查询
    (转)最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用15
  • 原文地址:https://www.cnblogs.com/Dy1an/p/16422191.html
Copyright © 2020-2023  润新知