grep正则表达式详解及练习
grep正则表达式详解及练习
一、在学习grep正则表达式前,先了解下linux著名的文本处理三剑客:
(1)grep、egrep、fgrep 文本搜索工具。
(2)sed 文本编辑工具,一种流编辑器,行编辑工具。
(3)awk 强大的文本分析工具,文本格式化工具,文本报告生成器。
以上三大命令均支持正则表达式,本文以grep正则表达式为例展开学习。
1、什么是正则表达式?
正则表达式(Regular Expression):由一类特殊字符及文本字符所编写的模式,其有些字符不表示其字面意义,而是用于表示控制或通配的功能。正则表达式只是字符串的一种描述(一种表示法),只有和支持正则表达式的工具相结合才能进行字符串处理。
2、正则表达式的构成:
正则表达式由两种字符构成。一种是在正则表达式中具体特殊意义的“元字符”,另一种是普通的“文本字符”。元字符可以是一个字符,如“^”,也可以是一个字符序列,如“\b”。
3、主要分为两类:(1)基本正则表达式(BRE)
(2)扩展正则表达式(ERE)
二、本文以grep为例来讲解正则表达式
1、grep家族有三大成员分别为:
grep:支持使用基本正则表达式。
egrep:支持使用扩展正则表达式。
fgrep:不支持使用正则表达式。
2、grep命令:
功能:根据用户指定的”pattern(过滤条件)“对目标文本逐行进行匹配检查;打印出符合条件的行,即文本搜索工具。注:PATTERN即过滤条件指由文本字符及正则表达式元字符所编写的字符串。
常用选项一:
--color=auto,每次grep搜索之后,自动高亮显示所匹配字符。
CentOS7定义了grep别名alias grep=’grep--color=auto’
-q:进入静默模式,该模式下,grep命令运行目的仅仅是执行一个条件测试,通常在脚本中使用,通过检查其返回值进行下一步操作。
-F:支持使用固定字符串,不支持正则表达式,相当于fgrep;
-f:FILE为每行包含了一个pattern的文本文件,即grep script;
[ ]:匹配范围内的任意单个字符 [abc]表示“a”或“b”或“c”
[^ ]:匹配范围外的任意单个字符 [^abc]表示除了“a”、“b”、“c”外的其他任意字符。
(2)匹配次数: 用在要指定其出现的次数的字符后面,限制其前面字符出现的次数,默认工作在贪婪模式。
*: 匹配前面的字符任意次(0、1、或多次),相当于\{0,\};
\{m,n\}:其前面字符出现最少m次最多n次,\{m,\}最少m次,\{o,n\}最多n次;
(3)位置锚定:限制使用搜索模式搜索文本,限制模式所匹配到的文本只能出现于目标文本的那个位置
^: 行首锚定;用于模式的最左侧,^PATTERN , ^hello搜寻以hello开头的行。
$: 行尾锚定;用于模式的最右侧,PATTERN$ , hello$搜寻以hello结束的行。
^PATTERN$: 让PATTERN完全匹配一整行, ^how are you$搜索内容为”how are you”的行。
(4)单词锚定: Linux中的单词指:由非特殊字符组成的连续字符(字符串)。
\<或\b: 词首锚定,用于单词模式的左侧,\<PATTREN或\bPATTERN
\>或\b: 词尾锚定,用于单词模式的右侧,PATTERN\>或PATTREN\b
\(PATTERN\):将此PATTERN匹配到的字符作为一个不可分割的整体进行处理;分组匹配到的内容会被正则表达式引擎自动记录到内部变量中,这些变量是\1,\2,\3,…
pat1\(pat\2)pat3\(pat4\(pat5\)pat\)
\1:第一组括号中的pattern匹配到的字符串,从左侧起,第一个左括号及与之匹配的右括号内模式匹配到的内容。
\2:第二组括号中的pattern匹配到的字符串,从左侧起,第二个左括号及与之匹配的右括号内模式匹配到的内容。
输出结果中行首字符跟行尾字符相同(行尾引用了行首匹配到内容)。
支持使用扩展正则表达式的grep命令,相当于grep -E,其常用选项基本同grep命令,可参考上文。
扩展正则表达式就是在基本正则表达式的基础上,增加了一些元字符,而且有部分参数是不需要添加\转义符使用的。
{m,n}: 其前面字符出现最少m次最多n次,{m,}最少m次,{o,n}最多n次
3、找出/etc/grub2.cfg文件中,以至少一个空白字符开头,后面又跟了非空白字符的行
4、找出"netstat -tan”命令的结果中,以‘LISTEN’后跟0或多个空白字符结尾的行;
5、找出"fdisk -l“命令的结果中,包含以/dev/后跟sd或hd及一个字母的行;
6、找出”ldd /usr/bin/cat“命令的结果中文件路径;
7、找出/proc/meminfo文件中,所有以大写或小写s开头的行;至少用三种方式实现;
8、显示当前系统上root、centos或spark用户的相关信息;
10、找出ifconfig命令结果中的1-255之间的整数;
转载于:https://blog.51cto.com/zhangpenglinux/1748897
grep正则表达式详解及练习相关推荐
- 【Linux】grep正则表达式详解
grep正则表达式 语法格式: grep [options] PATTERN [FILE...] grep [options] [-e PATTERN | -f FILE] [FILE...] 匹配模 ...
- linux下grep文件内容搜索工具及基本正则表达式详解
linux下grep文件内容搜索工具及基本正则表达式详解 grep命令: 根据模式(文本字符和基本正则表达式的元字符组合而成之匹配条件)搜索文本, 并将符合模式的文本行显示出来. 格式:grep [选 ...
- linux中grep命令 菜鸟教程,linux grep正则表达式与grep用法详解
需要大家牢记:正则表达式与通配符不一样,它们表示的含义并不相同 正则表达式只是字符串的一种描述,只有和支持正则表达式的工具相结合才能进行字符串处理.本文以grep为例来讲解正则表达式. grep命令 ...
- linux命令ps -aux|grep xxx详解
linux命令ps -aux|grep xxx详解 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大 ...
- java判断颜色合法_判断颜色是否合法的正则表达式(详解)
判断颜色是否合法的正则表达式(详解) "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$"; 意思是:以#开头,后面是数字和a-f的字符(大写或小写),这个值是 ...
- linux xxx命令,linux命令ps aux|grep xxx详解
对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大的进程查看命令. 使用该命令 可以确定有哪些进程正在运 ...
- grep命令详解(如何匹配多个字符串)(grep指令)(grep -q)
文章目录 20221011 grep如何匹配多个标志? 20230412 grep -q(`Use grep -q instead of comparing output with [ -n .. ] ...
- 正则,grep命令详解
正则表达式和grep.vim.awk.sed等的关系: 正则表达式是一种方法,相当于一种工艺,grep等命令相当于是一个具体的加工机器,机器在加工产品的时候,采用这种方法. 命令是怎么执行的: sel ...
- ps aux|grep xxx详解
linux命令ps aux|grep xxx详解 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大的 ...
- grep命令详解(常用参数)
grep命令详解: grep版本: # grep -V grep (GNU grep) 2.20 ... grep --help(或者"man grep")查看详细语法及参数 语法 ...
最新文章
- 牛客练习赛61 E 相似的子串(二分+哈希)难度⭐⭐⭐
- Nchain旗下矿池挖出首个BCH区块,“算力战争”真的要来了?
- 【语法】点语法的应用
- php保存设置,php如何实现编辑和保存文件?
- IT自动化:自动化的网络管理变得很重要
- 信息奥赛一本通1486: CH 6202 黑暗城堡 最短路径生成树计数
- VC学习笔记:文本图形
- 菜鸟学习笔记:Java提升篇6(IO流2——数据类型处理流、打印流、随机流)
- css 点击效果_使用CSS实现逼真的水波纹点击效果
- 模型描述的关系模式_框架篇:见识一下linux高性能网络IO+Reactor模型
- Ubuntu 16.04安装vsftpd 并开启ftp服务
- 在子MasterPage设置UserControl内的Web控件属性
- run `npm fund` for details
- 输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。
- ps制作苹果中的返回按钮
- Redis运行环境搭建
- 基于STC8G2K64S4单片机控制小车循迹(直流电机和步进电机)
- jqGrid学习笔记
- linux返回上次所在的目录
- 软考__第17章 战略管理
热门文章
- {$POINTERMATH ON} 方便指针操作的编译指令
- Scrapy框架之日志等级
- python学习第六天运算符总结大全
- linux中安装typecho的pathinfo配置
- RHEL 7.2 源码安装Python 3.6.2报错
- 201521123014《Java程序设计》第1周学习总结
- 【转】commons-lang.jar包简介
- Linux安装virgo
- javascript之querySelector和querySelectorAll
- python画龙猫_微信小程序支付demo,后端使用python