grep 与正则表达式
正则表达式只是字符串的一种描述,只有和支持正则表达式的工具相结合才能进行字符串处理。本文以grep为例来讲解正则表达式。
grep命令
功能:输入文件的每一行中查找字符串。
基本用法:
grep [-acinv] [--color=auto] [-A n] [-B n] '搜寻字符串' 文件名
参数说明:
-a:将二进制文档以文本方式处理
-c:显示匹配次数
-i:忽略大小写差异
-n:在行首显示行号
-A:After的意思,显示匹配字符串后n行的数据
-B:before的意思,显示匹配字符串前n行的数据
-v:显示没有匹配行-A:After的意思,显示匹配部分之后n行-B:before的意思,显示匹配部分之前n行
--color:以特定颜色高亮显示匹配关键字
‘搜寻字符串’是正则表达式,注意为了避免shell的元字符对正则表达式的影响,请用单引号(’’)括起来,千万不要用双引号括起来("”)或者不括起来。
正则表达式分为基本正则表达式和扩展正则表达式。下面分别简单总结一下。
基本正则表达式
正则表达式学习,主要是对正则表达式元数据的学习。正则表达式本身没有什么高深的东西,本文仅仅对基本正则表达式的元数据进行一下总结:
\s \b \S都是支持的,以及如下:
元数据 |
意义和范例 |
^word | 搜寻以word开头的行。
例如:搜寻以#开头的脚本注释行 grep –n ‘^#’ regular.txt |
word$ | 搜寻以word结束的行
例如,搜寻以‘.’结束的行 grep –n ‘.$’ regular.txt |
. | 匹配任意一个字符。
例如:grep –n ‘e.e’ regular.txt 匹配e和e之间有任意一个字符,可以匹配eee,eae,eve,但是不匹配ee。 |
\ | 转义字符。
例如:搜寻’,’是一个特殊字符,在正则表达式中有特殊含义。必须要先转义。 grep –n ‘\” regular.txt |
* | 前面的字符重复0到多次。
例如匹配gle,gogle,google,gooogle等等 grep –n ‘go*gle’ regular.txt |
[list] | 匹配一系列字符中的一个。
例如:匹配gl,gf。 grep –n ‘g[lf]’ regular.txt |
[n1-n2] | 匹配一个字符范围中的一个字符。
例如:匹配数字字符 grep –n ‘[0-9]’ regular.txt |
[^list] | 匹配字符集以外的字符
例如:grep –n ‘[^o]‘ regular.txt 匹配非o字符 |
\{n1,n2\} | 前面的字符重复n1,n2次
例如:匹配google,gooogle。 grep –n ‘go\{2,3\}gle’ regular.txt |
\<word | 单词是的开头。
例如:匹配以g开头的单词 grep –n ‘\<g’ regular.txt |
word\> | 匹配单词结尾
例如:匹配以tion结尾的单词 grep –n ‘tion\>’ regular.txt |
扩展正则表达式
grep一般情况下支持基本正则表达式,可以通过参数-E支持扩展正则表达式,另外grep单独提供了一个扩展命令叫做egrep用来支持扩展正则表达式,这条命令和grep -E等价。虽然一般情况下,基本正则表达式就够用了。特殊情况下,复杂的扩展表达式,可以简化字符串的匹配。
扩展正则表达式就是在基本正则表达式的基础上,增加了一些元数据。
元数据 |
意义和范例 |
+ | 重复前面字符1到多次。
例如:匹配god,good,goood等等字符串。 grep –nE go+d’ regular.txt |
? | 匹配0或1次前面的字符
例如,匹配gd,god grep –nE ‘go?d’ regular.txt |
| | 或(or)的方式匹配多个字串 例如:grep –nE ‘god|good’ regular.txt 匹配god或者good。 |
() | 匹配整个括号内的字符串,原来都是匹配单个字符
例如:搜寻good或者glad grep –nE ‘g(oo|la)’ regular.txt |
() | 前面的字符重复0到多次。
例如匹配gle,gogle,google,gooogle等等 grep –nE ‘go*gle’ regular.txt |
POSIX字符类
- [:alnum:]
-
文字数字字符
- [:alpha:]
-
非数字字符字符
- [:digit:]
-
数字字符
- [:graph:]
-
非空字符(非空格、控制字符)
- [:lower:]
-
小写字符
- [:cntrl:]
-
控制字符
- [:print:]
-
非空字符(包括空格)
- [:punct:]
-
标点符号
- [:space:]
-
所有空白字符(新行,空格,制表符)
- [:upper:]
-
大写字符
- [:xdigit:]
-
十六进制字符
实例
grep [Ss] /proc/meminfo
2、取出默认shell为非bash的用户;
grep -v 'bash' /etc/passwd
3、取出默认shell为bash的且其ID号最大的用户;
grep 'bash' /etc/passwd | cut -d: -f3 |sort |tail -1
4、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
grep '^#[[:space:]]\{1,\}[[:space:]]\{1,\}' /etc/rc.d/rc.sysinit
5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
grep '^[[:space:]]\{1,}' /boot/grub/grub.conf
6、找出/etc/passwd文件中一位数或两位数;
grep '\<[0-9]\{1,2\}\>' /etc/passwd
7、找出ifconfig命令结果中的1到255之间的整数;
ifconfig eth0|egrep '2[0-5][0-5]|1[0-9][0-9]|[1-9][0-9]|[0-9]'
8、查看当前系统上root用户的所有信息;
grep '\<root\>' /etc/passwd
9、添加用户bash和testbash、basher,而后找出当前系统上其用户名和默认shell相同的用户;
grep 与正则表达式的更多相关文章
- Linux grep与正则表达式
grep命令 格式:grep [-acinv] [--color=auto] '查找字符串' filename -a 将binary文件以text文件的 -c 计算找到 ‘查找字符串’ ...
- grep和正则表达式
正则表达式示例表字 符 意 义 示 例* 任意长度的字符串. a* 表示: 空字符串.aaaa.a…? 长度为0或者1的字符串. a? 表示: 空字符串和a.+ 长度为一个或者多个的字符串. a+表示 ...
- grep与正则表达式,grep、egrep和fgrep
grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串. ...
- 第5天(半天)【shell编程初步、grep及正则表达式】
第5天(半天)[shell编程初步.grep及正则表达式] shell编程初步(01)_recv shell脚本:文本文件 #!:/bin/bash #!:/usr/bin/python #!:/us ...
- [Linux 006]——grep和正则表达式
在使用系统时,我们或多或少的有一些搜索.查找的需求,必须要在文本中搜索某个关键字,或者过滤出文本中某些特定的行.grep 命令就为我们提供了这样一个功能,同时,grep 还可以使用正则表达式进行匹配, ...
- grep与正则表达式使用
grep简介 grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.通常grep有三种版本grep.egrep(等同于grep -E)和fgrep.egrep为扩展的g ...
- grep用法详解:grep与正则表达式【转】
转自:http://blog.csdn.net/hellochenlian/article/details/34088179 grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配 ...
- linux初级学习笔记十:linux grep及正则表达式!(视频序号:04_4)
本节学习的命令:grep 本节学习的技能: grep对文本的匹配 正则表达式的使用 知识点十:grep及正则表达式(4_4) grep,egrep,fgrep: grep: 根据模式搜索文本,并将符合 ...
- grep使用正则表达式搜索IP地址
递归搜索当前目录及其子目录.子目录的子目录……所包含文件是否包含IP地址 grep -r "[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}\.[[:digit: ...
- Linux文本处理三剑客之grep及正则表达式详解
Linux文本处理三剑客之grep及正则表达式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux文本处理三剑客概述 grep: 全称:"Global se ...
随机推荐
- HDU 5944 暴力
Fxx and string Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)T ...
- code::blocks的快捷键汇总
编辑部分: Ctrl + A:全选 Ctrl + C:复制 Ctrl + X: 剪切 Ctrl + V:粘贴 Ctrl + Z:撤销 Ctrl + S:保存 Ctrl + Y / Ctrl + S ...
- C#术语
数字代码.文本代码.机器码.托管代码.中间语言(IL).即时编译(JIT).COM(+).应用程序域.地址控件.虚拟内存
- numpy常用函数
numpy.ndarray.astype 更改np.array的类型.
- Codeforces Round #131 (Div. 2)
A. System of Equations \(a\)的范围在\(\sqrt n\)内,所以暴力枚举即可. B. Hometask 需要被2.5整除,所以末位必然为0,如果0没有出现,则直接返回-1 ...
- scala言语基础学习七
一.将函数赋值给变量 二.匿名函数 三.高阶函数 高阶函数好像调用不打印是看不到赋值 和普通函数区别 高阶函数的类型推断 reduce操作 相当于1*2*3*4*5*6*7*8*9 def getNa ...
- timus 1109 Conference(二分图匹配)
Conference Time limit: 0.5 secondMemory limit: 64 MB On the upcoming conference were sent M represen ...
- android中常见对话框之一AlertDialog
在Android应用中,有多种对话框:Dialog.AlertDialog.ProgressDialog.时间.日期等对话框. (1)Dialog类,是一切对话框的基类,需要注意的是,Dialog类虽 ...
- 移动端动画使用transform提升性能
在移动端做动画,对性能要求较高而通常的改变margin属性是性能极低的,即使使用绝对定位改变top,left这些属性性能也很差因此应该使用transform来进行动画效果,如transform:tra ...
- Understanding Delegates in C#
要学东西,还是得看第一手资料,看二.三手资料难免误会... http://www.codeproject.com/Articles/11657/Understanding-Delegates-in-C