linux shell (二)正则表达式
2015-08-29 23:11
351 查看
正则表达式基础(1)
元字符(metacharacters)是用来阐释字符表达式意义的字符,简言之,元字符就是描述字符的字符,它用于对字符表达式的内容、转换及各种操作信息进行描述。
正则表达式是由一串字符和元字符构成的字符串,简称RE(Regular Expression)。
正则表达式的主要功能是文本查询和字符串操作,正则表达式可以匹配文本的一个字符或字符集合。Linux是一套可免费使用和自由传播的类Unix操作系统
a、b、1、2等字符属于普通字符,普通字符可以按照字面意思理解,如:a只能理解为英文的小写字母a,没有其他隐藏含义。
而*、^、[]等元字符,Shell赋予了它们超越字面意思的意义,如:*符号的字面意义只是一个符号,而实际上却表示了重复前面的字符0次或多次的隐藏含义
正则表达式基础(2)
正则表达式基础(3)
*符号用于匹配前面一个普通字符的0次或多次重复
hel*o: *符号前面的普通字符是l,*字符就表示匹配l字符0次或多次,如字符串helo、hello、hellllllo都可以由hel*o来表示
.符号用于匹配任意一个字符
…73.表示前面三个字符为任意字符,第4和第5个字符是7和3,最后一个字符为任意字符,如xcb738、4J973U都能匹配上述字符串
^符号用于匹配行首,表示行首的字符是^字符后面的那个字符
^cloud表示匹配以cloud开头的行
$符号匹配行尾,$符号放在匹配字符之后a、b、1、2等字符属于普通字符,普通字符可以按照字面意思理解,如:a只能理解为英文的小写字母a,没有其他隐藏含义。
micky$表示匹配以micky结尾的所有行
^$ 表示空白行
正则表达式基础(4)
[]匹配字符集合,该符号支持穷举方法列出字符集合的所有元素
[0123456789]、[0-9]……
[A-Za-z] [A-Za-z]* 匹配所有英文单词
\符号是转义符,用于屏蔽一个元字符的特殊意义
\. \$ \^
\<\>符号是精确匹配符号,该符号利用\符号屏蔽<>符号
\<the\> 精确匹配单词the,them,they等不匹配
\{\}系列符号表示前一个字符的重复
\{n\}:匹配前面字符出现n次 ,如JO\{3\}B匹配JOOOB
\{n,\}:匹配前面字符至少出现n次,如JO\{3,\}B匹配JOOOB、JOOOOB、JOOOOOB等字符串
\{n,m\}:匹配前面字符出现n次与m次之间,如JO\{3,6\}B匹配JOOOB、JOOOOOOB等字符串
[a-z] \{5\}: 匹配5个小写英文字母,比如hello、house等
正则表达式扩展
awk和Perl等Linux工具还支持正则表达式扩展出来的一些元字符,这些元字符如下表所示
通配
通配(globbing)是把一个包含通配符的非具体文件名扩展到存储在计算机、服务器或者网络上的一批具体文件名的过程
最常用的通配符包括正则表达式元字符:?、*、[]、{}、^等,通配符与元字符意义不完全相同:
*符号不再表示其前面字符的重复,而是表示任意位的任意字符
?字符表示一位的任意字符
^符号在通配中不代表行首,而是代表取反意义
举三个例子:
[root@zawuglobus]#ls -l*.awk
[root@zawuglobus]#ls -l 0?.pem
[root@zawuglobus]#ls -l[a-h]*.[^awk]*
grep命令(1)
grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来,grep也是Linux中最广泛使用的命令之一
grep [选项][模式][文件…]
选项如下页表所示
模式可以是字符串,也可以是变量,还可以是正则表达式。需要说明的是,无论模式是何种形式,只要模式中包含空格,就需要使用双引号将模式括起来,举例:
[root@zawuglobus]#grep
certificate 00.pem
[root@zawuglobus]#grep user certificate 00.pem
=> 需要双引号
[root@zawuglobus]#grep "usercertificate" 00.pem
文件可以有多个,亦可以用通配来表示
grep命令(2)
元字符(metacharacters)是用来阐释字符表达式意义的字符,简言之,元字符就是描述字符的字符,它用于对字符表达式的内容、转换及各种操作信息进行描述。
正则表达式是由一串字符和元字符构成的字符串,简称RE(Regular Expression)。
正则表达式的主要功能是文本查询和字符串操作,正则表达式可以匹配文本的一个字符或字符集合。Linux是一套可免费使用和自由传播的类Unix操作系统
a、b、1、2等字符属于普通字符,普通字符可以按照字面意思理解,如:a只能理解为英文的小写字母a,没有其他隐藏含义。
而*、^、[]等元字符,Shell赋予了它们超越字面意思的意义,如:*符号的字面意义只是一个符号,而实际上却表示了重复前面的字符0次或多次的隐藏含义
正则表达式基础(2)
符号 | 意义 |
* | 0个或多个在*字符之前那个普通字符 |
. | 匹配任意字符 |
^ | 匹配行首,或后面字符的非 |
$ | 匹配行尾 |
[] | 匹配字符集合 |
\ | 转义符,屏蔽一个元字符的特殊意义 |
\<\> | 精确匹配符号 |
\{n\} | 匹配前面字符出现n次 |
\{n,\} | 匹配前面字符至少出现n次 |
\{n,m\} | 匹配前面字符出现n次与m次之间 |
*符号用于匹配前面一个普通字符的0次或多次重复
hel*o: *符号前面的普通字符是l,*字符就表示匹配l字符0次或多次,如字符串helo、hello、hellllllo都可以由hel*o来表示
.符号用于匹配任意一个字符
…73.表示前面三个字符为任意字符,第4和第5个字符是7和3,最后一个字符为任意字符,如xcb738、4J973U都能匹配上述字符串
^符号用于匹配行首,表示行首的字符是^字符后面的那个字符
^cloud表示匹配以cloud开头的行
$符号匹配行尾,$符号放在匹配字符之后a、b、1、2等字符属于普通字符,普通字符可以按照字面意思理解,如:a只能理解为英文的小写字母a,没有其他隐藏含义。
micky$表示匹配以micky结尾的所有行
^$ 表示空白行
正则表达式基础(4)
[]匹配字符集合,该符号支持穷举方法列出字符集合的所有元素
[0123456789]、[0-9]……
[A-Za-z] [A-Za-z]* 匹配所有英文单词
\符号是转义符,用于屏蔽一个元字符的特殊意义
\. \$ \^
\<\>符号是精确匹配符号,该符号利用\符号屏蔽<>符号
\<the\> 精确匹配单词the,them,they等不匹配
\{\}系列符号表示前一个字符的重复
\{n\}:匹配前面字符出现n次 ,如JO\{3\}B匹配JOOOB
\{n,\}:匹配前面字符至少出现n次,如JO\{3,\}B匹配JOOOB、JOOOOB、JOOOOOB等字符串
\{n,m\}:匹配前面字符出现n次与m次之间,如JO\{3,6\}B匹配JOOOB、JOOOOOOB等字符串
[a-z] \{5\}: 匹配5个小写英文字母,比如hello、house等
正则表达式扩展
awk和Perl等Linux工具还支持正则表达式扩展出来的一些元字符,这些元字符如下表所示
通配
通配(globbing)是把一个包含通配符的非具体文件名扩展到存储在计算机、服务器或者网络上的一批具体文件名的过程
最常用的通配符包括正则表达式元字符:?、*、[]、{}、^等,通配符与元字符意义不完全相同:
*符号不再表示其前面字符的重复,而是表示任意位的任意字符
?字符表示一位的任意字符
^符号在通配中不代表行首,而是代表取反意义
举三个例子:
[root@zawuglobus]#ls -l*.awk
[root@zawuglobus]#ls -l 0?.pem
[root@zawuglobus]#ls -l[a-h]*.[^awk]*
grep命令(1)
grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来,grep也是Linux中最广泛使用的命令之一
grep [选项][模式][文件…]
选项如下页表所示
模式可以是字符串,也可以是变量,还可以是正则表达式。需要说明的是,无论模式是何种形式,只要模式中包含空格,就需要使用双引号将模式括起来,举例:
[root@zawuglobus]#grep
certificate 00.pem
[root@zawuglobus]#grep user certificate 00.pem
=> 需要双引号
[root@zawuglobus]#grep "usercertificate" 00.pem
文件可以有多个,亦可以用通配来表示
grep命令(2)
选项 | 意义 |
-c | 只输出匹配行的数量 |
-i | 搜索时忽略大小写 |
-h | 查询多文件时不显示文件名 |
-l | 只列出符合匹配的文件名,而不列出具体匹配行 |
-n | 列出所有匹配行,并显示行号 |
-s | 不显示不存在或无匹配文本的错误信息 |
-v | 显示不包含匹配文本的所有行 |
-w | 匹配整词 |
-r | 递归搜索,不仅搜索当前工作目录,而且搜索子目录 |
-E | 支持扩展的正则表达式 |
-F | 不支持正则表达式,按照字符串的字面意思进行匹配 |
相关文章推荐
- shell中$0,$?,$!等的特殊用法
- shell脚本那点事儿3-5
- Shell编程(正则表达式)学习笔记
- powershell玩转litedb数据库
- 如何在Shell 中正确的传递函数返回值
- 关于shell
- shell programing
- 使用shell操作数据库
- Shell 种类
- linxu shell iconv 转码问题
- LinuxDeepin/Unix、Linux shell命令
- shell练习五
- Spark的Python和Scala shell介绍(翻译自Learning.Spark.Lightning-Fast.Big.Data.Analysis)
- Linux生产服务器Shell脚本分享
- hive shell命令
- 希尔排序(shell)
- Shell 脚本面试问题大全
- 一个Linux中用于监控的简易shell脚本
- 关于shell中的正则表达式和awk的使用
- SSH隧道管理内部服务(putty,ssh secure shell)for win