zoukankan      html  css  js  c++  java
  • Linux下的grep搜索命令详解(一)

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

    grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。

    grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

    1.命令格式:

    grep [option] pattern file

    主要参数:

    -c:只输出匹配行的计数。

    -I:不区分大 小写(只适用于单字符。

    -l:查询多文件时只输出包含匹配字符的文件名。

    -n:显示匹配行及 行号。

    -s:不显示不存在或无匹配文本的错误信息。

    -v:显示不包含匹配文本的所有行。

    2.命令功能:

    用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。

    3.命令参数:

    -a   --text   #不要忽略二进制的数据。   
    
    -A<显示行数>   --after-context=<显示行数>   #除了显示符合范本样式的那一列之外,并显示该行之后的内容。   
    
    -b   --byte-offset   #在显示符合样式的那一行之前,标示出该行第一个字符的编号。   
    
    -B<显示行数>   --before-context=<显示行数>   #除了显示符合样式的那一行之外,并显示该行之前的内容。   
    
    -c    --count   #计算符合样式的列数。   
    
    -C<显示行数>    --context=<显示行数>或-<显示行数>   #除了显示符合样式的那一行之外,并显示该行之前后的内容。   
    
    -d <动作>      --directories=<动作>   #当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。   
    
    -e<范本样式>  --regexp=<范本样式>   #指定字符串做为查找文件内容的样式。   
    
    -E      --extended-regexp   #将样式为延伸的普通表示法来使用。   
    
    -f<规则文件>  --file=<规则文件>   #指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。   
    
    -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   #在显示符合样式的那一行之前,标示出该行的列数编号。   
    
    -q   --quiet或--silent   #不显示任何信息。   
    
    -r   --recursive   #此参数的效果和指定“-d recurse”参数相同。   
    
    -s   --no-messages   #不显示错误信息。   
    
    -v   --revert-match   #显示不包含匹配文本的所有行。   
    
    -V   --version   #显示版本信息。   
    
    -w   --word-regexp   #只显示全字符合的列。   
    
    -x    --line-regexp   #只显示全列符合的列。   
    
    -y   #此参数的效果和指定“-i”参数相同。

    将/etc/passwd,有出现 root 的行取出来

    [finance@master2-dev finance]$ grep root /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    [finance@master2-dev finance]$ grep 'root' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin

    将/etc/passwd,有出现 root 的行取出来,同时显示这些行在/etc/passwd的行号

    [finance@master2-dev finance]$ grep -n root /etc/passwd
    1:root:x:0:0:root:/root:/bin/bash
    11:operator:x:11:0:operator:/root:/sbin/nologin

    在关键字的显示方面,grep 可以使用 --color=auto 来将关键字部分使用颜色显示。 这可是个很不错的功能啊!但是如果每次使用 grep 都得要自行加上 --color=auto 又显的很麻烦~ 此时那个好用的 alias 就得来处理一下啦!你可以在 ~/.bashrc 内加上这行:『alias grep='grep --color=auto'』再以『 source ~/.bashrc 』来立即生效即可喔! 这样每次运行 grep 他都会自动帮你加上颜色显示啦

    用 dmesg 列出核心信息,再以 grep 找出内含 eth 那行,要将捉到的关键字显色,且加上行号来表示

    [finance@master2-dev finance]$  dmesg | grep -n --color=auto 'eth'
    603:eth0: no IPv6 routers present

    在关键字所在行的前两行与后三行也一起捉出来显示

    [finance@master2-dev finance]$ dmesg | grep -n -A3 -B2 --color=auto 'eth'
    601-RPC: Registered tcp transport module.
    602-RPC: Registered tcp NFSv4.1 backchannel transport module.
    603:eth0: no IPv6 routers present
    604-hrtimer: interrupt took 5294012 ns
    605-rz[13034]: segfault at fffffffffffffff9 ip 00000038a4a7b93c sp 00007fff00deed88 error 4 in libc-2.12.so[38a4a00000+18a000]
    606-sh[5880]: segfault at 0 ip (null) sp 00007fffbfac9e70 error 14 in bash[400000+d4000]

    根据文件内容递归查找目录

    # grep 'energywise' *           #在当前目录搜索带'energywise'行的文件
    
    # grep -r 'energywise' *        #在当前目录及其子目录下搜索'energywise'行的文件
    # grep -l -r 'energywise' *     #在当前目录及其子目录下搜索'energywise'行的文件,但是不显示匹配的行,只显示匹配的文件

    这几个命令很使用,是查找文件的利器。

  • 相关阅读:
    微信调用相机上传照片+拍照上传
    遮罩层+软键盘
    样式问题
    连接微信分享图片
    一些链接
    图片等比例缩放
    About Memory Analysis
    Monitor Network and File I/O
    Measure Graphics Performance
    Measure CPU Use
  • 原文地址:https://www.cnblogs.com/longjshz/p/5805903.html
Copyright © 2011-2022 走看看