zoukankan      html  css  js  c++  java
  • linux工具-grep

    1. 基本语法

    grep keyword filename # 基本grep,在filename中搜索keyword
    grep keyword *.txt    # 搜索多个文件
    grep "a.*" filename   # 在模式中使用regexp,格式与python regexp相同,单双引号都行。
    zgrep keyword filename.gz # 在压缩文件中搜索
    

    2. 模式相关的选项

    -e 指定多个模式/搜索以-开头的字符

    grep -e a0 -e d3 filename # 匹配a0的行 或 匹配d3的行
    
    # 待搜索的字符以-开头, 如果不加-e选项, grep会把-9当作grep的选项而不是当作待搜索字符.
    grep -e -9 a.txt
    grep -e '-9' a.txt
    

    -E 增强模式

    grep -E "a0|d3" filename # 匹配a0的行 或 匹配d3的行
    

    注意:

    1. 引号可以是双引号,也可以是单引号。
    2. 引号中不能添加额外的空格。

    -i 忽略大小写

    grep -i Yes filename # 会搜到YES、Yes、yes等。
    

    -v 不匹配keyword的行

    grep -v a0 filename # 搜索不匹配a0的行。
    

    -w 按单词搜索

    grep -w is filename # 搜索匹配is的行,但is必须是完整单词,不会搜索到this、history等
    

    -x 按整行搜索

    grep -x ab filename # 只有行内容只有ab时才能匹配, 如果是abc则不匹配.
    

    3. 文件名相关的选项

    -r 递归目录文件进行搜索

    grep -r a0 dirname # 在当前目录及子目录的全部文件中搜索a0。
    

    注意:

    1. 此处需要指定dirname,而不是filename。
    2. 如果指定的是filename,则只会在filename中搜索,而不会递归目录。

    4. 输出内容相关的选项

    -A/-B/-C 抓取匹配行之前、之后的行

    grep -A2 a0 filename # 抓取匹配a0的行,同时抓取之后2行。
    grep -B3 a0 filename # 抓取匹配a0的行,同时抓取之前3行。
    grep -C1 a0 filename # 抓取匹配a0的行,同时抓取前后各1行。
    

    说明:

    1. -A after
    2. -B before
    3. -C center
    4. -A2,A和2中间可以有空格,也可以没空格

    -c 返回匹配行的数目

    grep -c a0 filename # 返回一个数字0~N,匹配a0的行的数目。
    

    注意:如果filename是多个文件,返回内容就不只是一个数字了,而是一个列表,列表元素是filename:N.

    -l 只显示文件名

    grep -l keyword *.txt # 返回一个list,list元素是文件名,只有文件内容包含keyword的文件名会被返回,其它文件名不返回。
    

    -n 显示行号

    # 不使用-n时,返回keyword所在的行文本line_text,使用-n时返回line_num:line_text.
    # 如果filename是多个文件,则返回 filename:line_num:line_text.
    grep -n keyword filename
    

    5. 使用正则表达式:

    grep支持的正则:

    元字符 说明 举例
    ^和$ 行首和行尾 grep ^ab$ a.txt
    . 任意字符 grep a.*b a.txt
    转义元字符 grep ^ a.txt
    * 前面字符重复0到多次 grep a.*b a.txt
    [list]或[^list] 一系列字符 grep a[bc] a.txt
    [n1-n2] 字符范围内的一个字符 grep [0-9] a.txt

    egrep额外支持的正则:

    元字符 说明 举例
    {n1,n2} 前面的字符重复n1~n2次 egrep c{2.5} a.txt
    + 重复前面字符1到多次 egrep c+ a.txt
    ? 重复前面字符0到1次
    | 或, pattern要写在引号中, 否则报错 egrep ‘abc
    () 匹配括号内整个字符串 egrep 'g(oo
  • 相关阅读:
    渗透测试中的文件传输通道1- cmd下下载文件
    内网渗透常用命令
    技术剖析中国菜刀原理
    win8 iis安装及网站发布
    C++与C的区别一
    C语言实现单链表,并完成链表常用API函数
    C语言实现数组及链表的快速排序
    使用C语言封装数组,动态实现增删改查
    C语言中静态断言的使用
    二分查找法C语言实现
  • 原文地址:https://www.cnblogs.com/gaiqingfeng/p/13644510.html
Copyright © 2011-2022 走看看