微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

grep 及 正则表达式

一、grep概念

grep,即搜索正则表达式,也就是说grep简单来讲就是用来搜索匹配字符的。


二、正则表达式:

(1)正则表达式遵循的几个重复的操作

- ? 最多匹配一次

- * 匹配零次或者任意多次

- + 匹配一次以上

- {n} 匹配n次

- {n,} 最少匹配n次

- {,m} 最多匹配m次

(2)常用的正则表达式栗子:

^ 行首

$ 行尾

[ ] 匹配出现的任意一个

^user$ 只包含user

[tty]$ 以tty结尾的行

^ [ ^ l ] 排除关联目录的目录列表

[ . * 0 ] 0之前或之后加任意字符

[ ^ $ ] 空行

[ ^ . * $ ] 匹配行中任意字符串

^ . . . . . . $ 包括6个字符的行

\ ^ q 以^ q开始行

^ . $ 仅有一个字符的行

^\.[0-9][0-9] 以一个句点和两个数字开始的行

[ 0 - 9 ] \ { 2 \ } - [ 0 - 9 ] \ { 2 \ } - [ 0 - 9 ] \ { 4 \ } 日期格式d d - m m - y y y y

[ 0 - 9 ] \ { 3 \ } \ . [ 0 - 9 ] \ { 3 \ } \ . [ 0 - 9 ] \ { 3 \ } \ . [ 0 - 9 ] \ { 3 \ } I P地址格式

[A-Za-z]* 匹配所有单词

三、常用的 grep 选项

(1)-c 只输出匹配行的计数。

spacer.gif

wKioL1dzLirycykFAAA5r3uNTNc328.png

(2)-i不区分大小写(只适用于单字符)。

spacer.gif

wKiom1dzLlORHRZOAABFIIRv-ac706.png

(3)-n显示匹配行及行号。

spacer.gif

wKioL1dzLnfRAoViAABDPheT474746.png

(4)-s不显示不存在或无匹配文本的错误信息。

wKiom1dzLs2g636-AAA_mpGRuQg755.png

(5)-v显示不包含匹配文本的所有行。

spacer.gif

wKioL1dzLvTDi5elAABKlT80Xlc001.png

file1是file拷贝出来的,即cp file file1

(6)-l查询文件时只输出包含匹配字符的文件名。

spacer.gif

wKioL1dzLx-A_JYPAAA5TYSiVRE569.png

(7)-h查询文件不显示文件名。

wKioL1dzLzuB69HaAAArJw_GtUs384.png

(8)多次过滤:

spacer.gif

wKioL1dzL3fz13K5AAA8-5OcHlk791.png

(9)使用 grep 匹配“与”或者“或”模式

grep命令加- E参数,表示允许使用扩展模式匹配。

spacer.gif

wKioL1dzMD2zl3poAABCWYhu34k755.png

(10)-w 搜索整个词,而不是词中的部分字串。

spacer.gif

wKioL1dzMHqB14ZJAAA1p5DnTNc070.png

(11)-A 显示匹配行之后的N行

spacer.gif

wKiom1dzMKrBulzBAAAvLR3VfWU577.png

-B 显示匹配行之前的N行

spacer.gif

wKioL1dzMMGCjeS7AAAukEyV5GM404.png

-C 显示匹配行前后的N行

spacer.gif

wKioL1dzMNnS9jl0AAAvuqZ3r2I560.png

(12)-r 递归搜索全部的文件

用法$ grep -r "file" *

(13)-o 只显示匹配的字串(当使用正则表达式时比较有用处)

spacer.gif

wKioL1dzMT7jBjGUAAA140vrkmY306.png

(14)-b 显示匹配的位置

spacer.gif

wKiom1dzMVeRdn-BAABKGzqbR2w617.png

注意:以上输出显示的不是行内的位置,而是整个文件中的字节byte位置

(15)--color将搜索到的字符予以颜色加以标识,易于辨认

spacer.gif

wKioL1dzMXKSN0a2AAAk3dwM-VA616.png

(16)-q 静模式,不输出,在shell脚本中经常用到

spacer.gif

wKioL1dzMYWTg7kCAAA7RceCksE981.png


四、grep中使用正则表达式

(1). 匹配任意单个字符

spacer.gif

wKioL1dzMkigv_sIAAA1IRp-Ie4721.png

(2)*匹配前面一个字符任意次(可以是0次)

spacer.gif

wKiom1dzMpmQ45D-AAA0QUyeCF4949.png

(3).* 匹配任意长度的任意字符(贪婪模式)

spacer.gif

wKioL1dzMsSzOVoCAAA589KJHqM607.png

(4)[ ]指定范围内的任意单个字符

[^]指定范围内之外的字符

wKioL1dzM-CzXUBKAABadN9iquA820.png

(5)X\{m,n\} X出现大于m次,小于n次

spacer.gif

wKiom1dzM7vi27HdAAA4FhzbiZc460.png

(6)X\{m,\} X出现大于m次,无上限

spacer.gif

wKioL1dzM6iC5-YaAAA66oWtCKg626.png

(7)? 匹配其前面的字符0次或一次(-E,使用扩展表达式)

wKiom1dzM5KgheKTAABMN561o7A409.png

(8)锚定符^ 锚定行首(行首匹配)

spacer.gif

wKiom1dzMyeyu8KUAAAz-catl0w387.png

(9)$ 锚定行尾(行尾匹配)

wKiom1dzM0awT-AGAAA3r4jVvM8775.png

(10)^$ 空白行

spacer.gif

wKiom1dzM2uRkxFpAAA_oBHaMZs820.png

原文地址:https://www.jb51.cc/regex/359127.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐