频道栏目
首页 > 资讯 > Linux > 正文

grep,egrep, fgrep文本过滤工具简介

19-02-26        来源:[db:作者]  
收藏   我要投稿

linux上文本处理上剑客:

                grep:文本过滤工具(模式:pattern)工具;
                                grep:基本正则表达式, -E   -F 
                                egrep:扩展正则表达式,-G -F 
                                fgrep: 不支持正则表达式, 

                sed:stream editor.流编辑器;文本编辑工具;
                awk:linux上的实现为gawk,文本报告生成器(格式化文本);

                正则表达式: 
                         由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于
                        表示控制或通配的功能; 

                        分两类: 
                                基本正则表达式:BRE 
                                扩展正则表达式:ERE 

                元字符: \(hello[[:space:]]\+\)\+ 

grep:global search Regular expresslon and print out the line.

                作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配
                检查;打印报表到的行; 
                 模式:由正则表达式的元字符及文本字符所编写出的过滤条件; 

            正则表达式引擎: 
                         grep [options] PATTERN [FILE...]     
                         grep [options] [-e PATTERN | -f FILE] [FILE...] 

             选项: 
                        grep='grep --color=auto' 
                         -i:忽略字符的大小写; 
                         -o:只输出文件中匹配到的部分 
                         -v:反转查找 
                         -E:支持使用扩展的正则表达式元字符; 
                         -q: --quiet, --silent;静默模式,即不输出任何信息; 

                         -A#:after,后#行 
                         -B#:before,前#行 
                         -C#:context,前后各#行 

实例:

显示/etc/passwd文件中root的后两行
37.grep,egrep, fgrep文本过滤工具

显示/etc/passwd文件中root的前后两行
37.grep,egrep, fgrep文本过滤工具


基本正则表达式元字符:

            字符匹配: 
                                    .    :匹配任意单个字符; 
                                    []   :匹配指定范围内的任意单个字符; 
                                    [^]  :匹配指定范围外的任意单个字符; 
                                 [a-z],[A-Z],[0-9],[a-z0-9]
                                 [[:upper:]] :所有大写字母
                                [[:lower:]]:所有小写字母
                                [[:alpha:]]:所有字母
                                [[:digit:]]:所有数字
                                [[:alnum:]]:所有数字和字母
                                [[:space:]]:所有空白字符
                                [[:punct:]]:所有标点符号
                                [^]: 匹配指定范围外的任意单个字符
                                [^[:upper:]]
                                [^0-9]
                                [^[:alnum:]]

37.grep,egrep, fgrep文本过滤工具


    匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式; 

                *:匹配其前面的字符任意次;0,1,多次; 
                 .*  :匹配任意长度的任意字符; 
                 \?  :匹配其前面的字符 0 次或 1 次;即其前面的字符是可有可无的; 
                 \+  :匹配其前面的字符 1 次或多次;即其前面的字符要出现 
                 \{m\}:匹配其前面的字符 m次; 
                 \{m,n\}:匹配其前面的字符至少 m次,至多 n 次; 
                                     \{0,n}:至多 n 次; 
                                        \{m,\}:至少 m次; 

位置锚定:
^:行首锚定:用于模式的最左侧;
$:行尾锚定:用于模式的最右侧;
^PATTERN$:用于PATTERN来匹配整行;
^$ :空白行;
^[[:space:]]*$: 空行或包含空白字符的行;

            单词:非特殊字符组成的连续字符(字符串)都称为单词;

            \<或\b :词首锚定,用于单词模式的左侧;
            \>或\b :词尾锚定,用于单词模式的右侧;
            \:匹配完整单词;

37.grep,egrep, fgrep文本过滤工具

实例:

    行首锚定:

37.grep,egrep, fgrep文本过滤工具

行尾锚定:

37.grep,egrep, fgrep文本过滤工具

37.grep,egrep, fgrep文本过滤工具


分组和引用:

             \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理; 
             \(xy\)*ab :表示 xy可以出现 0 次 1 次或多次; 

Note:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些
变量为:

    \1:模式从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
    \2:模式从左侧起,第二个左括号以及与之匹配右括号之间的模式所匹配到的字符;
    \3:

    ~]#grep “\(l..e\).*1” lovers.txt 
    后向引用:引用前面的分组括号中的模式所匹配到的字符;


egrep: 支持扩展的正则表达式

            选项:

                 -i:忽略字符的大小写;  -o:只输出文件中匹配到的部分 -v:反转查找 
                 -q: --quiet, --silent;静默模式,即不输出任何信息; 
                    -G:支持基本正则表达式;
                 -A#:after,后#行 
                 -B#:before,前#行 
                 -C#:context,前后各#行 

        扩展正则表达式的元字符; 
                 字符匹配: 
                            .  :匹配任意单个字符; 
                            [] :匹配指定范围内的任意单个字符; 
                            [^]:匹配指定范围外的任意单个字符; 

             次数匹配 
                        *:匹配其前面的字符任意次;0,1,多次; 
                         *  :匹配任意长度的任意字符; 
                         ?  :匹配其前面的字符 0 次或 1 次;即其前面的字符是可有可无的; 
                         +  :匹配其前面的字符 1 次或多次;即其前面的字符要出现 
                         {m}:匹配其前面的字符 m次; 
                         {m,n}:匹配其前面的字符至少 m次,至多 n 次; 
                                         {0,n}:至多 n 次; 
                                         {m}:至少 m次; 
            位置锚定: 
                        ^:行首锚定:用于模式的最左侧; 
                        $:行尾锚定:用于模式的最右侧; 
                        \<, \b :词首锚定; 
                        \>, \b:词尾锚定; 
        分组及引用: 
                     ():分组:括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中; 
                 后向引用: \1, \2 ,… 

                或 :   a|b: a 或者 b;    c|cat:c 或 cat   

        实例: ~]# grep -E "\<[0-9]{2,3}\>" /etc/passwd 

37.grep,egrep, fgrep文本过滤工具

fgrep:不支持正则表达式元字符:

        当无需要用到元字符编写模式时,使用fgrep必能更好;
相关TAG标签
上一篇:Centos7网络异常解决办法
下一篇:Linux基础命令之netstat网络状态
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站