zoukankan      html  css  js  c++  java
  • grep知识及常用用法梳理

    1. grep语法及其参数说明

      grep是文本搜索工具,能根据用户指定的'PATTERN模式'目标文本进行逐行匹配检查,注意grep默认会以 行 为单位打印匹配到的行.

      以下是grep命令的语法及常用参数:

    grep [OPTIONS] PATTERN [FILE...] 
          选项    模式   文件
    ###参数及含义
    --color=auto          #<==匹配成功显示颜色
    -v                     #<==排除
    -i                     #<==忽略大小写
    -n                    #<==显示匹配行及其行号
    -o                     #<==仅显示匹配到的字符串
    -w                    #<==只匹配过滤的单词
    -q                     #<==静默参数,不输入任何信息
    -r             #<==递归过滤目录下的文件
    -A                     #<==after,后n行
    -B                     #<==before,前n行
    -C                     #<==前后各n行
    -E                     #<== 相当于egrep,同时过滤多个,中间使用 | 分隔

     给grep命令使用时匹配到的字符添加颜色:

    echo "export GREP_COLORS='ms=38;5;214;48;5;30'" >> ~/.bashrc
    echo "alias grep='grep --color=auto -E'" >> ~/.bashrc
    source ~/.bashrc

    2. grep命令常用用法

    ######命令参数常用用法:  
    [root@test ~]# cat a.txt
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    ntp:x:38:38::/etc/ntp:/sbin/nologin
    [root@test ~]# grep -n 'ntp' a.txt  #<==显示字符串所在行及其行号
    3:ntp:x:38:38::/etc/ntp:/sbin/nologin
    [root@test ~]# grep -v '^ntp' a.txt  #<==排除用法,将以ntp开头的行排除后打印输出
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    [root@test ~]# grep -i 'Privilege' a.txt    #<==忽略大小写,输出字符串匹配到的行
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    [root@test ~]# grep -o 'Privilege' a.txt    #<==仅仅显示匹配到的字符串
    Privilege
    [root@test ~]# grep -w 'Privilege' a.txt    #<==很少用,匹配单词,但有时用于脚本中匹配指定的用户
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    [root@test ~]# seq 10 >a.txt
    [root@test ~]# grep -E "1|2" a.txt  #同时过滤多个字符串所在的行
    [root@test ~]# grep -A 3 '5' a.txt  #<==显示字符串5及后面3行
    5
    6
    7
    8
    [root@test ~]# grep -B 3 '5' a.txt  #<==显示字符串'5'及之前3行
    2
    3
    4
    5
    [root@test ~]# grep -C 3 '5' a.txt  #<==显示字符串'5'及前后3行
    2
    3
    4
    5
    6
    7
    8
    ######配合正则表达式常用用法(注意:使用egrep就无需  反斜线转义,grep使用正则需要  转义)
    [root@test ~]# cat a.txt
    abxy
    xay
    xxxxxxxxy
    x
    [root@test ~]# grep 'x*?y' a.txt  #<==注意,这里不会匹配到任何内容,此时?代表单个字符
    [root@test ~]# grep 'x*y' a.txt  #<==贪婪模式(最长匹配原则)匹配
    abxy
    xay
    xxxxxxxxy
    [root@test ~]# grep 'x*?y' a.txt  #<==此时问号是正则,代表匹配前面字符0次或1次
    abxy
    xay
    xxxxxxxxy
    [root@test ~]# grep 'a.*y' a.txt   #<==.*代表任意内容
    abxy
    xay
    [root@test ~]# grep 'x?y' a.txt
    abxy
    xay
    xxxxxxxxy
    [root@test ~]# grep 'x+y' a.txt  #<==+号匹配前面字符x至少1次
    abxy
    xxxxxxxxy
    #####匹配次数 
    [root@test ~]# tail -5 /etc/passwd >a.txt
    [root@test ~]# cat a.txt
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    abrt:x:173:173::/etc/abrt:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    ntp:x:38:38::/etc/ntp:/sbin/nologin
    [root@test ~]# grep -o '[a-z]{3}t' a.txt  #<==匹配文本中,t字符串的前面有3个随意小写字母的字符串
    ount
    abrt
    abrt
    arat
    empt
    post
    post
    [root@test ~]# grep -o '[a-z]{3,5}t' a.txt  #<==匹配,t字符串的前面有3-5个小写字母的字符串
    [root@test ~]# grep -o '[a-z]{,5}t' a.txt  #<==匹配,t字符串的前面有至多5个小写字母的字符串
    [root@test ~]# grep -o '[a-z]{3,}t' a.txt  #<==匹配,t字符串的前面有至少3个小写字母的字符串
    #####位置锚定 
    [root@test ~]# cat a.txt
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    abrt:x:173:173::/etc/abrt:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    ntp:x:38:38::/etc/ntp:/sbin/nologin
    [root@test ~]# grep -o '<[a-z]{3}t' a.txt   #<==必须出现单词首部
    abrt
    abrt
    empt
    post
    post
    [root@test ~]# grep -o '<[a-z]{3}t>' a.txt  #<==锚定  单词尾部
    abrt
    abrt
    [root@test ~]# ifconfig eth0|sed -n '2p'|grep -o '<10.0.0.30>'  #<==grep功能不擅长过滤此种内容
    10.0.0.30
    ######生产常用于去除空行和以#号开头的行
    [root@test ~]# grep -Ev "^$|^#" /etc/yum.repos.d/CentOS-Base.repo

      

  • 相关阅读:
    使用数组实现简单线性表功能
    解析.NET 许可证编译器 (Lc.exe) 的原理与源代码剖析
    Entity Framework with NOLOCK
    64位CentOS 6.0下搭建LAMP环境
    如何正确看待Linq的DistinctBy扩展和ForEach扩展
    jQuery最佳实践
    大话数据结构-树
    hdu2534-Score
    WKE——Webkit精简的纯C接口的浏览器
    WM_ERASEBKGND官方解释(翻译),以及Delphi里所有的使用情况(就是绘制窗口控件背景色,并阻止进一步传递消息)
  • 原文地址:https://www.cnblogs.com/blog-tim/p/11791237.html
Copyright © 2011-2022 走看看