linux grep 与 正则表达式

元字符简单说明

.    英文句号,实心点  作用 :代表任意一个字符(换行符除外)

[]   方括号 将匹配方括号的任意一个字符。

*   代表多个或0个其他字符

[^char] 不配 ^ 后的任何字符,此处为不匹配 c h a r

^char 行首匹配,仅当char出现在行首时进行匹配

^char[char] 对行首的 charc 、charh、 chara、 charr 进行匹配

$ 只匹配在行尾出现的实例 ,如 s$ 只匹配以s结尾的行

\   反斜杠,转义符,把元字符还原为普通字符  ,如 \?  则只会匹配 ? 

?  代表零个或一个或多个字符 (不通用)

[a-z] a 到z 的任意一个字符 类似的有[A-Z] 和[0-9] 亦可以混合使用 如 [b-k 6-8] 代表 b到k或者6 到8的任意一个字符


grep 功能说明:查找文件里符合条件的字符串。

普通的grep支持 regular expression

egrep 为grep 的加强版,支持更多的正则表达式,支持extended regular expression

而grep -E 和 egrep 一样


语  法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示行数>][-C<显示行数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]

grep 中若范本样式串不是正则表达式可以不用单引号 如 匹配 test中的 ok 则可用 grep ok test 或者 grep 'ok' test  (test文件在当前的目录下)

而 grep c[abc] t  test  则建议写成 grep 'c[abc]'  test

补充说明:grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一行显示出来。若不指定任何文件名称,或是所给予的文件名为“-”,则grep指令会从标准输入设备读取数据。


参  数:
  -a或--text   不要忽略二进制的数据。
  -A<显示行数>或--after-context=<显示行数>   除了显示符合范本样式的那一行之外,并显示该行之后的内容。
  -b或--byte-offset   在显示符合范本样式的那一行之前,标示出该行第一个字符的位编号。
  -B<显示行数>或--before-context=<显示行数>   除了显示符合范本样式的那一行之外,并显示该行之前的内容。
  -c或--count   计算符合范本样式的行数。
  -C<显示行数>或--context=<显示行数>或-<显示行数>   除了显示符合范本样式的那一行之外,并显示该行之前后的内容。
  -d<进行动作>或--directories=<进行动作>   当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
  -e<范本样式>或--regexp=<范本样式>   指定字符串做为查找文件内容的范本样式。
  -E或--extended-regexp   将范本样式为延伸的普通表示法来使用。
  -f<范本文件>或--file=<范本文件>   指定范本文件,其内容含有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每行一个范本样式。
  -F或--fixed-regexp   将范本样式视为固定字符串的列表。
  -G或--basic-regexp   将范本样式视为普通的表示法来使用。
  -h或--no-filename   不显示该行所在的文件名
  -H或--with-filename   同时显示出匹配行所在的文件的文件名

  -i或--ignore-case   匹配时 不区分大小写

  -l或--file-with-matches   即显示匹配的文件名

  -L或--files-without-match   显示不匹配的文件名

  -n或--line-number   显示匹配行的行编号号

  -q或--quiet或--silent   不显示任何信息。
  -r或--recursive   此参数的效果和指定“-d recurse”参数相同。
  -s或--no-messages   不显示错误信息。
  -v或--revert-match   反转查找,显示不配的行。
  -V或--version   显示版本信息。
  -w或--word-regexp   只显示全字符合的行。
  -x或--line-regexp   只显示全行符合的行。
  -y   此参数的效果和指定“-i”参数相同。
  --help   在线帮助。


实例应用 

 例子1:  test 文本中有 student  和 students的多行子串 ,  要求只显示 包含student 的行

grep -v students test | grep -e student 

或者 grep -w student  test

说明 先将 test 文件中包含students的行全部去掉 -v 选项就是不包含匹配项的选项 然后使用管道将得到的内容再进行一次匹配找出包含student的行

例子2:匹配test 中有[] 的行

grep -e \\[\\]  test   或者 grep  '\[\]'  test 

         类似的:

 grep -e    \\. 只匹配 .       亦可以用 grep  '\.'  test

        grep -e   \\*    只匹配*     同上

grep -e    \\^ 只匹配^       同上

grep -e    \\# 只匹配 #    同上

例子3 搜索当前目录中所有文件内容中包含 ok 的行,并显示该行所在的文件名及行号

grep ok   -n -H ./*  或 grep ok -n -H *    其中 * 表示任意文件名(不能匹配隐藏的文件名如 .test即不能匹配)


例子4  查找test文本中以 a或者 #结尾的行

egrep '(a|\#)$'    test








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值