首页 / 正则 / grep工具的使用与正则表达式
grep工具的使用与正则表达式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了grep工具的使用与正则表达式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5894字,纯文字阅读大概需要9分钟。
内容图文
![grep工具的使用与正则表达式](/upload/InfoBanner/zyjiaocheng/1161/6d8aabf114814826859486e8a1f275de.jpg)
grep : (Global search REgular expression and Print out the line.)
grep 是 Linux 的文本内容搜索工具,对于给定的文档,以行为单位,根据匹配条件对文本内容逐行匹配,匹配的条件小到单个字符大到整行,搜索时以指定的模式匹配字符串表达的内容为单位,这里提到的单位有字符串长度的意义,以这个字符串作为一个完整的单元从前至后匹配行中的内容,当在行中匹配到符合条件的内容后默认是将该行的予以显示,而不是匹配到的字符串,搜索时要求给定的搜索条件 , 即模式,也叫做正则表达式。
正则表达式:
正则表达式 是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能,正则表达式就是字符与字符间的验证描述关系的展现。
grep 的使用格式:
grep[options] ‘pattern‘ FILE ; 从 FILE 文件中查找符合指定模式 pattern 的行并显示出来
例如:在 /etc/passwd 文件中查找包含 root 字符串的行
# grep ‘root‘ /etc/passwd
root:x:0:0:root:/root:/bin/bash
正则表达式主要分为两类:
基本正则表达式 (grep) ,扩展正则表达式( egrep )
正则表达式的元字符:
具有特殊意义的专用字符,有通配的效果,不表示其字面意义,用于额外的功能性描述
一,基本正则表达式的元字符:
1 、字符匹配元字符:
.: 匹配任意单个字符,例如:查找 /etc/passwd 中以 r 开头中间跟任意两个字符的行, grep “r..t” /etc/passwd 。
字符匹配元字符还有:
[]: 匹配指定范围内的任意单个字符 , 常见的指定范围字符集能表达的字符有:
[0-9],[[:digit:]] 数字;
[a-z],[[:lower:]] 小写;
[A-Z],[[:upper:]] 大写;
[[:space:]] 空格;
[[:punct:]] 标点;
[[:alpha:]] 字母;
[[:alnum:]] 字母 + 数字;
[^]: 取反
2 、次数匹配元字符:用于实现指定其前面的字符所能够出现的次数
* :任意长度,它前面的字符可以出现任意次,例如: grep “x*y” /tmp/test.txt 。
注:示例中用的 grep.txt 文件中定义了若干行,内容是: Xxy , xyy , y , xy , y , ay , xxxxy , xyy 每串字符是一行。
\?:0 次或 1 次,它前面的字符是可有可无的,例如: grep “x\?y” /tmp/test.txt
\{m\}:m 次,它前面的字符要出现 m 次,例如: grep “x\{2\}y” /tmp/test.txt
\{m,n\}: 至少 m 次,至多 n 次,例如: grep “x\{2,5\}y” /tmp/test.txt
\{m,\}: 至少 m 次,例如: grep “x\{3,\}y” /tmp/test.txt
\{0,n\}: 至多 n 次,例如: grep “x\{0,2\}y” /tmp/test.txt
.* 匹配任意长度的任意字符 , 例如,如查找 /etc/passwd 中以 k 开头后面跟任意字符的行
3 、位置锚定元字符
^: 行首锚定,例如查找 /etc/passwd 中以 root 为行首的行
$: 行尾锚定,例如查找 /etc/issue 文件中以字母 m 结尾的行
^$: 空白行,例如查找 /etc/issue 文件中的空白行
\< 或 \b: 词首锚定,例如查找 /etc/passwd 中以 root 作为词首的行
\> 或 \b: 词尾锚定,例如查找 /etc/passwd 中以 root 作为词尾的行
4 、分组和引用元字符
\(\), 例如: \(ab\)*
\#: 引用元字符,引用第 n 个括号匹配到的内容
分组和引用元字符往往同时出现,例如 : 查找系统上其用户名和默认 shell 相同的用户
基本正则表达式中常用的选项:
--color=auto: 自动选择颜色将内容高亮显示出来
-i: 匹配时不区分大小写
-v: 反向选取,只显示不符合模式的行;
-o: 只显示被模式匹配到的字串,而不是整个行;
-A #: 显示匹配到的行,同时显示其后面的 # 行
-B #: 显示匹配到的行,同时显示其前面的 # 行
-C #: 显示匹配到的行,同时显示其前后的 # 行
二,扩展正则表达式的元字符
扩展的正则表达式使用 grep –E 选项来表达使用扩展的正则表达式或者是使用 egrep 来表达,这两种表示法意义相同,使用扩展的正则表达式时用在原基本正则表达式元字符前的 \ 转义字符就不再使用了,而当需要使用基本正则表达式中的元字符的原字符本意时,就需要用到扩展的正则表达式,而里面用到的特殊字符,如?、 / 、(、)等字符就需要转义,遇到这种情况是必须要用到扩展正则表达式来写模式匹配字符串的。
1、字符匹配元字符:这些元字符与基本正则表达式中的用法相同。
.: 任意单个字符;
[]: 字符集范围内的单个字符;
[^]: 字符集范围外的单个字符
2、 次数匹配元字符:
* :匹配其前面字符任意次 , 例如: grep -E “x*y” /tmp/test.txt
?: 匹配其前面字符 0 次或 1 次,例如: grep -E “x?y” /tmp/test.txt
+ :至少 1 次,例如查找 /tmp/test.txt 文件中 x 出现至少一次的行,grep -E "x+y" /tmp/test.txt
{ m } : 精确匹配 m 次,例如: grep -E “x{2}y” /tmp/test.txt
{ m,n } : 至少 m 次,至多 n 次,例如: grep -E “x{2,5}y” /tmp/test.txt
{ m, }:匹配其前面的字符至少 m 次,例如: grep -E “x{3,}y” /tmp/test.txt
{0,n} :匹配其前面的字符至多 n 次 , 例如: grep -E “x{0,2}y” /tmp/test.txt
3、位置锚定元字符:位置锚定元字符在 pattern 表达式中的写法与基本正则表达式的相同
^ :行首锚定
$ :行尾锚定
\<,\b :词首锚定
\>,\b :词尾锚定
^$,^[[:space:]]*$ :空白行
4、 分组和引用:
( ): 分组
引用: \#
分组示例:查找
/proc/meminfo
文件中以
S
或
s
开头的行
,grep –E “^(s|S)” /proc/meminfo
引用示例:查找系统上其用户名和默认 shell 相同的用户
正则表达式写法的自我经验总结:
1、 1、 首先要考虑表达式字符串所在行的位置,比如行首,行尾,或者词首和词尾或某些字符的前后等,很多时候要搜索的字符串位置会比较隐晦的表达出来,但是我们在实际的搜索过程中要其自身的位置特点,甚至是观察其周围字符的特点和位置将其表达出来,否则表达式的内容表达的内容就不完整或缺少内容或所要的字符串并不能符合要求。
2、 2、其次要考虑的是字串的字符内容,是什么类型的字符,要匹配的字符要能完整的表达所要匹配的完整字符串,其中的字母数字特殊字符都要完整表达出来。
3、 3 、 考虑字符出现的的次数,往往查找字符串都是匹配前面的字符,有很多时候匹配字符串的长度要求会隐讳的表达出来,如中间跟任意字符,或某类字符有多个等等,次数的匹配也是正则表达式字串完整意义重要的一环,也是表达式书写完整充分的关键。
grep 工具的使用及正则表达式的说明至此结束。
原文:http://9164364.blog.51cto.com/9154364/1437696
内容总结
以上是互联网集市为您收集整理的grep工具的使用与正则表达式全部内容,希望文章能够帮你解决grep工具的使用与正则表达式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。