您当前的位置: 首页 >  linux

liaowenxiong

暂无认证

  • 2浏览

    0关注

    1171博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Linux 系统中用于在文件内查找指定的字符串的命令 -- grep/egrep/fgrep 的区别详解

liaowenxiong 发布时间:2021-07-29 12:35:07 ,浏览量:2

文章目录
  • 一、命令介绍
    • grep
    • egrep
    • fgrep
  • 二、正则表达式元字符扩展集
  • 三、POSIX 字符集

一、命令介绍 grep

一种强大的文本搜索工具,用于在文件内查找指定的字符串,在不使用转义符的前提下支持基本的正则表达式来搜索文本,并把匹配的行打印出来。

Linux 使用 GNU 版本的 grep。它可以通过 -G-E-F 等选项来使用 egrepfgrep 的功能。

grep 的工作方式是这样的,它在一个或多个文件中搜索模板(pattern)。如果模板包括空格,则必须使用双引号将其包裹起来,模板后的所有字符串被看作文件名。

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

egrep

egrep,称为扩展的 grep 命令,其实和 grep -E 等价,支持基本和扩展的正则表达式,使用的语法及参数可参照 grep 指令,与 grep 的不同点在于解读字符串的方法。egrep 是用 extended regular expression 语法来解读的,而 grep 则用 basic regular expression 语法解读,extended regular expressionbasic regular expression 的表达更规范。

fgrep

fgrep 就是 fixed grepfast grep,等同于 grep -F。它把所有的字符都看作普通字符,也就是说,正则表达式中的元字符全部按字符原义解释。

fgrep 命令搜索字符串而不是搜索匹配表达式的模式。它利用固定的字符串来对文本进行搜索,但不支持正则表达式的引用,所以此命令的执行速度也最快。

二、正则表达式元字符扩展集

在扩展的正则表达中把写成 \(\) 写成 ()\{ \} 写成 {},加入了 + 限定符,表示匹配其前面的元素至少出现一次,无上限;加入了 ? 限定符,表示匹配其前面的元素 0 个或者 1 个;新增了或符号 |,表示或者的意思。基本正则表达式使用 (){}+?| 都需要加 \ 进行转义,在扩展正则表达中不需要。

扩展的元字符解释+匹配一个或多个前面的元素。如:[a-z]+able,表示匹配一个或多个小写字母后跟着 able 的串,如 loveableenabledisableaable 等。在 greppattern 中需要转义,写成 \+?匹配零个或 1 个前面的元素。如:gr?p,表示匹配 gp 或者 grp,即字符 r 可有可无|代表或者的意思。如:a|b|c 表示匹配 abc;如:grep|sed 表示匹配 grepsed。在 grep 中需要转义,写成 \|,或者通过选项 -E 来实现,如:grep -E 'c|cat' filename,表示在文件 filename 内查找 c 或者 cat,而 egrep 直接写成:egrep 'c|cat' filename()分组符号,如:love(able|rs),表示匹配 loveablelovers;如:(ov)+,表示匹配一个或多个 ov,即匹配至少一个 ov。在 grep 中需要使用转义符,写成 \(\){m,n}匹配其前面的元素 mn 次 。在 grep 中直接使用区间量词,需要转义,写成:\{m,n\} 三、POSIX 字符集

为了在不同国家的字符编码中保持一致,POSIX(The Portable Operating System Interface) 增加了特殊的字符类,如 [:alnum:]A-Za-z0-9 的另一个写法。要把它们放到 [] 号内才能成为正则表达式,如:[A- Za-z0-9] 等价于 [[:alnum:]]。除了 fgrepgrepegrep 都支持 POSIX 字符集。

字符表达式说明[[:alnum:]]文字数字字符[[:alpha:]]文字字符[[:digit:]]数字字符[[:graph:]]非空字符(非空格,控制字符)[[:lower:]]小写字符[[:cntrl:]]控制字符[[:print:]]非空字符(包括空格)[[:punct:]]标点符号[[:space:]]所有空白字符(新行,空格,制表符)[[:upper:]]大写字符[[:xdigit:]]十六制数字(0-9,a-f,A-F)

注:如果在英语系的国家中,上述的文字字符就是指英文字母。另外POSIX 字符集可以参考《正则表达式详解》中的 POSIX 字符集章节。

关注
打赏
1661566967
查看更多评论
立即登录/注册

微信扫码登录

0.0435s