shell正则
第五天
REGEXP:REGular EXPression
Pattern:
正则表达式:
Basic REGEXP:基本
Extended REGEXP:扩展
基本正则表达式:
字符匹配类:
.: 任意单个字符
[]: 指定范围内的任意单个字符
[^]: 外
字符次数匹配:
*: 其前的字符任意次
\?: 其前的字符0或1次
\{m,n\}:至少m次,至多n次;(m可以为0,但不能省略,n为0可以省略)
.*: 任意长度的任意字符
锚定:
^: 铆钉行首
$: 锚定行尾
\<, \b:锚定单词首
\>, \b:锚定词尾
\(\):实现分组
\1, \2, \3, ...用于后向引用
grep:使用基本正则表达式定义的模式来过滤文本的命令;
-i 忽略字符大小写
-v 反向搜索,显示不匹配的字符
-o 只显示匹配到的字符串
--color
-E: extended 使用扩展正则表达式
-A NUM: after-context=NUM 显示匹配到字符后面的n行
-B NUM: before-context=NUM 显示匹配到字符前面的n行
-C NUM: context=NUM 前后各n行
例子:grep -C 1 --colour '^gdm' /etc/passwd
7、取出一个文件路径的目录名称;即父目录 /var/log 取var /etc/passwd/ 取etc
echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@\1@g'
基名:
echo "/etc/rc.d/" | sed -r 's@^/.*/([^/]+)/?@\1@g'
扩展正则表达式:grep -E
字符匹配:(与正则表达式相同)
. :任意单个字符
[] :指定范围内的任意单个字符
[^]: 外
次数匹配:
*: (与正则相同)其前字符任意次
?: (与正则相同)其前字符0或1次
+: 匹配其前面的字符至少1次 【相当于正则表达式中的\{1,\}】
5、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;
grep '^[[:space:]]\{1,\}' /boot/grub/grub.conf
grep -E '^[[:space:]]+' /boot/grub/grub.conf
{m,n}:无需使用反斜线
位置锚定:(与正则一样)
^
$
\<
\>
\b
分组:
():分组(不再需要斜线) 【此法很爽,用就用扩展正则】
\1, \2, \3, ...
或者
|: or
C|cat: 是指C或cat而非Cat或cat 即 | 的两侧整体部分
grep -E '(C|c)at' test.txt
2、找出ifconfig命令结果中的1-255之间的整数;
ifconfig | egrep '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>
有|要加括号防止锚定错误
grep -E = egrep
4、显示所有以数字结尾且文件名中不包含空白的文件;
ls *[^[:space:]]*[0-9] ?????????
找出/boot/grub/grub.conf文件中1-255之间的数字;
\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>
\.
ifconfig | egrep '\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'
ifconfig | egrep --color '(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'
IPv4:
5类:A B C D E
A:1-127
B:128-191
C:192-223
\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])\>(\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>){2}\.\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>
http://mageedu.blog.51cto.com/
grep, egrep
fgrep: (fast grep 快速匹配检索 )不支持正则表达式
https://blog.csdn.net/yufenghyc/article/details/51078107
grep中使用"\d"匹配数字不成功的原因
首先正则表达式分为三类(man grep可以看到,分别是basic RegExs,extended RegExs,perl RegExs)
正则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索或替换那些符合某个模式的文本内容。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。
一、正则表达式分类:
1、基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx 简称 BREs)
2、扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称 EREs)
3、Perl 的正则表达式(Perl Regular Expression 又叫 Perl RegEx 简称 PREs)
说明:只有掌握了正则表达式,才能全面地掌握 Linux 下的常用文本工具(例如:grep、egrep、GUN sed、 Awk 等) 的用法
二、Linux 中常用文本工具与正则表达式的关系
常握 Linux 下几种常用文本工具的特点,对于我们更好的使用正则表达式是很有帮助的
- grep , egrep 正则表达式特点:
)grep 支持:BREs、EREs、PREs 正则表达式 grep 指令后不跟任何参数,则表示要使用 ”BREs“ grep 指令后跟 ”-E" 参数,则表示要使用 “EREs“ grep 指令后跟 “-P" 参数,则表示要使用 “PREs" )egrep 支持:EREs、PREs 正则表达式 egrep 指令后不跟任何参数,则表示要使用 “EREs” egrep 指令后跟 “-P" 参数,则表示要使用 “PREs" )grep 与 egrep 正则匹配文件,处理文件方法 a. grep 与 egrep 的处理对象:文本文件 b. grep 与 egrep 的处理过程:查找文本文件中是否含要查找的 “关键字”(关键字可以是正则表达式) ,如果含有要查找的 ”关健字“,那么默认返回该文本文件中包含该”关健字“的该行的内容,并在标准输出中显示出来,除非使用了“>" 重定向符号, c. grep 与 egrep 在处理文本文件时,是按行处理的
- sed 正则表达式特点
)sed 文本工具支持:BREs、EREs sed 指令默认是使用"BREs" sed 命令参数 “-r ” ,则表示要使用“EREs" )sed 功能与作用 a. sed 处理的对象:文本文件 b. sed 处理操作:对文本文件的内容进行 --- 查找、替换、删除、增加等操作 c. sed 在处理文本文件的时候,也是按行处理的
- Awk(gawk)正则表达式特点
)Awk 文本工具支持:EREs awk 指令默认是使用 “EREs" )Awk 文本工具处理文本的特点 a. awk 处理的对象:文本文件 b. awk 处理操作:主要是对列进行操作






shell正则的更多相关文章
- shell正则表达
shell正则表达 .*和.?的比较: 比如说匹配输入串A: 101000000000100 使用 1.*1 将会匹配到1010000000001,匹配方法:先匹配至输入串A的最后, 然后向前匹配,直 ...
- shell正则式解析身份证和手机号
cat test2.html | sed -e 's/\(^\|[^0-9]\)\(13[0-9][0-9]\{8\}\|14[579][0-9]\{8\}\|15[0-3,5-9][0-9]\{8\ ...
- shell正则匹配IP地址
IP分成5大类: A类地址 ⑴ 第1字节为网络地址,其它3个字节为主机地址. ⑵ 范围:1.0.0.1—126.155.255.254 ⑶ 私有地址和保留地址: ① 10.X.X.X是私有地址(只能在 ...
- shell 正则匹配IP地址
比如255.255.255.255 ,共4段,我们将255分为四个部分,0-99,100-199,200-249,250-255 0-99:[1-9]?[0-9] # ...
- shell脚本--内容查找之grep命令
grep命令可以检索文件中包含关键字(可以使用正则)的行,默认区分大小写. ubuntu@ubuntu:~/test$ cat test.txt this is linux this is Linux ...
- shell脚本杂
1.sh -x 跟踪shell脚本中的每个命令 [root@master shellexer]# cat bash.sh #!/bin/bash var=$ echo $var [root@maste ...
- 使用expect实现自动交互,shell命令行自动输入,脚本自动化,变量引用,expect spawn执行带引号命令,expect 变量为空,不生效,不能匹配通配符*,函数,数组
背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作 ...
- 使用expect实现自动交互,shell命令行自动输入
背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作 ...
- DAY1 linux 50条命令
1. tar压缩,解压缩 tar -cvf *** (压缩) tar -xvf *** (解压缩) [root@bogon ~]# tar cvf test.tar test/ test/ test ...
随机推荐
- 【优才原创】Android的拖放机制
优才网 [优才原创]Android的拖放机制 2016-04-18 优才学院 优才网 一.拖放机制概述 ² 拖放操作是手指触摸屏幕上的某一对象.然后拖动该对象.最后在屏幕的某个位置释放该对象并运行某种 ...
- 使用putty从linux主机上面往windows主机下面拷贝文件
更新一下,把putty的包解压以后,想要在dos窗口中直接使用,必须把putty解压的文件的路径添加到环境变量中,这样使用起来就会非常简单了. 郁闷了好久,终于搞定了putty的上传下载文件命令psc ...
- 为什么阿里巴巴要求谨慎使用ArrayList中的subList方法
GitHub 3.7k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 3.7k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 3.7k Star 的 ...
- 解决 三星Note3 桌面小部件不实时更新/不刷新 的问题
机型及问题描述:我的是三星note3 (国行 SM-N9008V),已ROOT,安装了LBE安全大师.在桌面小部件中,有些不会实时更新.比如有 滴答清单(办过的事项无法勾选),百度云音乐(歌曲播放更新 ...
- rsync 删除大量小文件
3 find with delete 复制代码代码如下: test time find ./ -type f -delete find ./ -type f -delete 0.4 ...
- 【Python学习】之yagmail库实现发送邮件
上代码: import yagmail sendmail = 'xxx@126.com' sendpswd = 'xxx' receivemail = 'xxx@qq.com' # 连接邮箱服务器 y ...
- Java应用一般架构
转载一下文章: 自己连看三便方的其要点精髓. 当我们架设一个系统的时候通常需要考虑到如何与其他系统交互,所以我们首先需要知道各种系统之间是如何交互的,使用何种技术实现. 1. 不同系统不同语言之间的交 ...
- 常见UI组件的一个模板
效果: 代码: using UnityEngine; using UnityEditor; using System.Collections; using System.IO; using Unity ...
- java jdbc连接数据库,Properties 属性设置参数方法
今天在整合为数据库发现在配置中实现的赋值方式,可以用代码实现.特记录下共以后参考: 代码: // 操作数据库 Connection conn; String strData ...
- commons-dbutils:1.6 ——java.sql.SQLException: 不支持的特性
描述:使用jdbc创建连接后,使用commons-dbutils-1.6 数据库工具类,查询报错如下:java.sql.SQLException: 不支持的特性 Query: 经过测试跟踪在commo ...