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 ...
随机推荐
- win10新增快捷键
按此键 出现位置 重要程度 联想记忆 替代 用途 +A 打开“操作中心” 右侧, ★★★★★ Action 控制面板 +S ...
- Matlab神经网络工具箱学习之二
螃蟹的分类 这个例子的目的是根据螃蟹的品种.背壳的长宽等等属性来判断螃蟹的性别,雄性还是雌性. 训练数据一共有六个属性: species, frontallip, rearwidth, length, ...
- ZOJ 1047 Image Perimeters
原题链接 题目大意:鼠标点击一块,求与之联通的所有区域的边长之和. 解法:广度优先搜索.从选中的这个点开始,往周围8个点依次搜索,访问过的点做上标记.如果该点上下左右的一个或多个方向没有相邻的点,边长 ...
- Spring事务管理 -- 挺好
Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作.今天一起学习一下Spring的事务管理.Spring的事务管理分为声明式跟编程式.声明式就是在Spring的配置文件中进行相关配置 ...
- AXIOM
AXIOM是一个实现了延迟构造和拉(pull parsing)解析的轻量级的xml解析器 http://reeboo.iteye.com/blog/317391 http://reeboo.iteye ...
- leetcode 146. LRU Cache ----- java
esign and implement a data structure for Least Recently Used (LRU) cache. It should support the foll ...
- Samba服务器安装及配置
Samba最早诞生在unix操作系统上面,samba是基于SMB(Server Message Block)协议,是一种客户端服务器协议 一.安装samba # yum -y install samb ...
- NOIP2011 普及組 統計單詞數
题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给 ...
- ndk-build出错,错误以及解决办法如下
用NDK编译jni目录下的文件了,我的系统是Ubuntu10.04,NDK版本是android-ndk-r7b. 切换到工程的jni目录下执行:ndk-build(ndk-build的路径已经添加到系 ...
- Processor Speculative & pipeline
https://en.wikipedia.org/wiki/Instruction-level_parallelism https://en.wikipedia.org/wiki/Instructio ...