首页 > 其他 > 详细

Grep命令及正则表达式

时间:2020-01-02 10:03:22      阅读:97      评论:0      收藏:0      [点我收藏+]

Grep

文本搜索工具,根据用户指定的模式(过滤条件)对目标文本逐行进行匹配检查并打印匹配到的行

模式:由正则表达式的元字符及文本自负所编写的过滤条件

  • 选项

    • --color=auto # 高亮显示

    • -i:忽略字符大小写

    • -w:强制完全匹配字词

    • -o:仅显示匹配到的字符串本身

    • -v:显示不能被匹配到的行

    • -E:支持扩展正则表达式

    • -q:静默模式,不输出内容,脚本判断

    • -n:输出的同时打印行号

    • -H:为每一匹配项打印文件名

    • -A:打印以文本结尾的NUM 行

    • -B:打印以文本起始的NUM 行

    • -C:印输出文本NUM 行

  • 基本正则表达式

    • 字符匹配

      • . 匹配任意单个字符;

      • [] 匹配指定范围内的任意单个字符;

      • [^] 匹配指定范围外的单个字符;

        • 匹配数字[:digit:];

        • 匹配小写字母[:lower:];

        • 匹配大写字母[:upper:];

        • 所有字母[:alpha:];

        • 所有字母+数字[:alnum:];

        • 所有标点符号[:punct:];

        • 所有空白字符[:space:];

          grep "r[[:alpha:]][[:alpha:]]t" /etc/passwd
    • 匹配次数:用在要指定其出现次数字符的后边,用于限制前面字符出现的次数(默认工作在贪婪模式);

      • *:匹配前面字符任意次,0次,1次或多次;

        grep "r.?t" /etc/passwd
      • .*:匹配任意长度的任意字符;

      • ?:匹配前面的字符0次或1次;

      • \+:匹配前面的字符一次或多次;

      • \{m\}:匹配前面的字符m次;

      • \{m,n\}:匹配前面的字符至少m次,至多n次;

        • \{0,n\}:至多n次,至少不限
        • \{m,\}:至少m次,至多不限
    • 位置锚定

      • ^:定位到行首;只能用于模式的最左侧
      • $:定位到行尾;指定用户模式的最右侧
      • ^PATTERN$:匹配整行
        • ^$:匹配空行
        • ^[[::space]]*$:包含空白字符的空行
      • 单词位置锚定(非特殊字符组成的连续字符串)
        • \<或\b:词首锚定,用于单词模式的左侧
        • \>或\b:词尾锚定,用户单词模式的右侧
        • \<PATTERN\>:匹配完整单词
    • 练习

      1. 显示/etc/passwd不以/bin/bash结尾的行

        ]$ grep -v "bin/bash"$ /etc/passwd
      2. 显示/etc/passwd/文件中的2位数或三位数

        ]$ grep "\<[0-9]\{2,3\}\>" /etc/passwd
        ]$ grep "\<[0-9]{2,3}\>" /etc/passwd
      3. 显示/etc/grub2.cfg文件中,至少一个空白字符开头,且后面非空白字符的行

        ]$ grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg
        ]$ grep "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg
      4. 找出netstat -tan命令的结尾中以"LISTEN"后跟0、1或多个空白字符结尾的行

        $] netstat -tan|grep "LISTEN[[:space:]]*$"
    • 分组及引用

    • 分组括号内的模式匹配到的内容会被正则表达式引擎记录在内部变量中,引用格式为

      \1;模式从左侧起,第一个"("及")"之间的模式锁匹配到的字符

      \2;

      \3,……

      • \(xy\)*ab:xy可以出现0次、1次或多次

        vim lovers.txt
            He likes his lover.
            He loves his lover.
            SHe likes her liker.
            SHe loves her liker.
        
        grep "\(l..e\).*\1" lovers.txt
      • 后向引用:引用前面的分组括号中模式所匹配到的字符。

egrep

  • 选项

    • -i,-o,-v,-q,-A,-B,-C,-G(支持基本正则表达式)
      扩展正则表达式的元字符
  1. 字符匹配

    • .:任意单个字符
    • []:指定范围内的任意单个字符
    • [^]:指定范围外的任意单个字符
  2. 次数匹配

    • *:匹配*前的字符任意次数
    • ?:匹配?前的字符0次或1次
    • +:+前的字符至少出现一次
    • {m}:至少匹配m次
    • {m,n}:至少m次,至多n次
      • {0,n}
      • {m,}
  3. 位置锚定

    • ^:行首锚定
    • $:行尾锚定
    • \<或\b:词首锚定
    • \>或\b:词尾锚定
  4. 分组及引用

    • ():分组;括号内的模式匹配到的内容会被记录到正则表达式引擎的内嵌变量中

      向后引用:\1,\2,\3,……

      a|b:a或者b

      • C|cat == C或cat
      • (C|c)at == Cat或cat

Grep命令及正则表达式

原文:https://www.cnblogs.com/liy36/p/12131574.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!