zoukankan      html  css  js  c++  java
  • grep工具及正则表达式

    正则表达式和通配符

    正则表达式与通配符不一样,它们表示的含义并不相同!正则表达式只是一种表示法,只要工具支持这种表示法,那么该工具就可以处理正则表达式的字符串。vim、grep、awk、sed都支持正则表达式,也正是因为它们支持正则,才显得它们强大。

    很多编程语言都有正则。
    python的re相关正则介绍:http://www.cnblogs.com/liao-lin/p/7091866.html

    grep工具

    grep通用正则表达式分析程序(global research regular expression and printing)
    用途:使用正则表达式搜索文本,并把匹配的行打印出来
    grep用法:
    grep [options] 'pattern' filename
    常用选项:

    • -a 以文本文件方式搜索
    • -n 打印匹配到的行的行号
    • -i 忽略大小写匹配
    • -c 如果匹配成功,则将匹配到的行数打印出来
    • -o 只显示匹配内容
    • -q 静默模式,过滤成功与否都没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容
    • -l 如果匹配成功,则只将文件名打印出来,失败则不打印,通常与-rl一起用,grep -rl 'root' /etc/
    • -An 如果匹配成功,则将匹配行及其后n行一起打印出来,after
    • -Bn 如果匹配成功,则将匹配行及其前n行一起打印出来,before
    • -Cn 如果匹配成功,则将匹配行及其前后n行一起打印出来,context
    • -f 根据文件内容进行匹配,从文件每一行获取匹配模式
    • -v 取反,反向选择,不匹配
    • -w 匹配单词(单词用分隔符来界定)
    • -E 扩展正则,等同于egrep

    基础正则介绍

    ^       行首
    $        行尾
    .         除了换行符以外的任意单个字符
    ?         前导字符出现零个或一个
    *         前导字符出现零个或多个
    +         前导字符出现一个或多个
    .*         所有字符
    []         字符组内的任一字符
    [^]       对字符组内的字符匹配取反(反向匹配)
    ^[^]     匹配不是[]内字符开头的内容
    [a-z]      小写字母
    [A-Z]     大写字母
    [a-Z]     小写和大写字母
    [0-9]      数字
    <          单词头,单词一般以空格或者特殊符做分隔,连续的字符串被当做单词
    >          单词尾
    abc|def    abc或def
    a(bc|de)f  abcf或adef
    x{m}        x出现m次
    x{m,n}      x出现m次到n次
    x{m,}        x出现m次到无限次
    

    示例:

    输出b文件中在a文件相同的行
    # grep -f a b  
    
    输出b文件中在a文件不同的行
    # grep -v -f a b
    
    去除空格sshd_config文件空行或#开头的注释行
    # egrep -v "^$|^#" /etc/ssh/sshd_config
    
    输出匹配的前五个结果
    # seq 20|egrep -m 5 '[0-9]{2}'  
    10  
    11  
    12  
    13  
    14  
    
    统计匹配多少行
    # seq 20|egrep -c '[0-9]{2}'  
    11
    
    匹配/etc/passwd文件以root开头的行
    # grep ^root /etc/passwd  
    root:x:0:0:root:/root:/bin/bash
    
    递归搜索/etc目录下包含192.168.内容的conf后缀文件
    # grep -rl "192.168." /etc/ |grep ".conf$"
    /etc/resolv.conf  
    /etc/dnsmasq.conf  
    /etc/rsyslog.conf  
    /etc/security/access.conf  
    
    匹配所有IP
    # egrep -r -o "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" /etc  
    
    打印匹配结果及后三行
    # seq 10 |grep 5 -A 3  
    5  
    6  
    7  
    8
  • 相关阅读:
    js 日期比较 (输入的是字符串格式)
    js 弹出确认 取消对话框
    存储过程中查询多个字段的值来判断
    SQL中IF查询
    SQL server 2000安装时提示我”以前的某个程序安装已在安装计算机上创建挂起的文件操
    怎样做人
    RSS
    Silverlight教程第四部分:使用 Style 元素更好地封装观感 (木野狐译)
    Silverlight 2 初览
    Silverlight教程第七部分: 使用控件模板定制控件的观感
  • 原文地址:https://www.cnblogs.com/liao-lin/p/6939668.html
Copyright © 2011-2022 走看看