Vbird的Linux私房菜学习笔记之正则表达式-特殊字符
2013-05-20 20:57
573 查看
正则表达式:正则表达式是以行为单位处理字符串的一种方法。它可以藉由一些特殊符号的使用,可以让使用者轻易达到“查找/删除/替换”某特定字符串的功能。
由于使用的语系中英文字母,数字的编码顺序不同,所以会对正则表达式的处理结果产生影响,所以我们在使用正则表达式时,都是使用兼容POSIX的标准。为了避免英文字母、数字编码的不同对字符截取产生的影响,底下的特殊字符需要牢记!
[ ]搜索集合字符
示例:
grep -n 'goo[dg]' /tmp/test.txt
此命令会显示出test.txt文件中包含good或goog字符串的行并显示行号;
'[]'表示[]内字符合集中的某一个字符,[a-z]表示一个小写英文字符,[0-9]表示一个数字字符。
反向选择符^
示例:
grep -n '[^a-z]ood' /tmp/test.txt
此命令会显示出test.txt文件中包含ood但ood前面不是小写英文字符的行,并显示行号;
为了避免由于语系字符编码的不同而导致的问题,此命令可以等同于:
grep -n '[^[:lower:]ood' /tmp/test.txt
注意此处'^'所处的位置是在集合字符[]内部
定位字符:行首符'^'和尾符'$'
示例:
grep -n '^first' /tmp/test.txt
此命令会显示出test.txt文件中包含first且first位于行首的行,并且显示行号;
注意此处'^'所处的位置不在集合字符[]内部
grep -n '^[^[:upper:]]' /tmp/test.txt
此命令会显示出test.txt文件中行首不是大写英文字符的行,并显示行号;
注意此命令中两个'^'的位置,以及它们表示的意思!!
grep -n ';$' /tmp/test.txt
此命令会显示出test.txt文件中以';'结尾的行,并显示行号;
grep -n '^$' /tmp/test.txt
此命令会显示出test.txt文件中的空行,并显示行号;
任意一个字符'.'和重复字符'*'
.(小数点):表示一定有一个任意的字符;
*(星号):重复前面的字符0到无穷次;
示例:
grep -n 't..t' /tmp/test.txt
此命令会显示出test.txt文件中包含以字符t开头和结尾并且中间有2个任意字符的行,并显示行号;
grep -n 'goo*g' /tmp/test.txt
此命令会显示出test.txt文件中包含以字符g开头和结尾并且中间有至少1个字符o的行,并显示行号;
grep -n 'g.*g' /tmp/test.txt
此命令会显示出test.txt文件中包含以字符g开头和结尾的行,并显示行号;
限定连续重复字符{}
由于shell中字符{}有特殊意义,所以在这里要使用转移字符\
示例:
grep -n 'go\{2\}g' /tmp/test.txt
此命令会显示test.txt文件中出包含字符串goog的行,并且显示行号;
grep -n 'go\{2,5\}g' /tmp/test.txt
此命令会显示test.txt文件中出包含字符串goog,gooog,goooog或gooooog的行,并且显示行号;
遗留问题:如何找出包含2个重复英文字符形如"aa"、"bb"的行,并显示行号;
此处要用到扩展正则表达式,命令如下:
egrep -ni '([a-z])\1' /tmp/test.txt
此处的'\1'表示反向引用前面圆括号内匹配的内容
常规正则表达式元字符总结:
扩展正则表达式元字符:
当然扩展正则表达式也需要工具程序的支持才能使用,比如grep就不支持扩展正则表达式,要用egrep指令才行。
本文出自 “凌乱的脚印” 博客,请务必保留此出处http://leohsiung.blog.51cto.com/7081290/1205098
由于使用的语系中英文字母,数字的编码顺序不同,所以会对正则表达式的处理结果产生影响,所以我们在使用正则表达式时,都是使用兼容POSIX的标准。为了避免英文字母、数字编码的不同对字符截取产生的影响,底下的特殊字符需要牢记!
[:alnum:] | 英文字符和数字A-Z,a-z,0-9 |
[:alpha:] | 英文字符A-Z,a-z |
[:digit:] | 数字0-9 |
[:xdigit:] | 16进制的数字0-9,A-F,a-f |
[:upper:] | 大写英文字符A-Z |
[:lower:] | 小写英文字符a-z |
示例:
grep -n 'goo[dg]' /tmp/test.txt
此命令会显示出test.txt文件中包含good或goog字符串的行并显示行号;
'[]'表示[]内字符合集中的某一个字符,[a-z]表示一个小写英文字符,[0-9]表示一个数字字符。
反向选择符^
示例:
grep -n '[^a-z]ood' /tmp/test.txt
此命令会显示出test.txt文件中包含ood但ood前面不是小写英文字符的行,并显示行号;
为了避免由于语系字符编码的不同而导致的问题,此命令可以等同于:
grep -n '[^[:lower:]ood' /tmp/test.txt
注意此处'^'所处的位置是在集合字符[]内部
定位字符:行首符'^'和尾符'$'
示例:
grep -n '^first' /tmp/test.txt
此命令会显示出test.txt文件中包含first且first位于行首的行,并且显示行号;
注意此处'^'所处的位置不在集合字符[]内部
grep -n '^[^[:upper:]]' /tmp/test.txt
此命令会显示出test.txt文件中行首不是大写英文字符的行,并显示行号;
注意此命令中两个'^'的位置,以及它们表示的意思!!
grep -n ';$' /tmp/test.txt
此命令会显示出test.txt文件中以';'结尾的行,并显示行号;
grep -n '^$' /tmp/test.txt
此命令会显示出test.txt文件中的空行,并显示行号;
任意一个字符'.'和重复字符'*'
.(小数点):表示一定有一个任意的字符;
*(星号):重复前面的字符0到无穷次;
示例:
grep -n 't..t' /tmp/test.txt
此命令会显示出test.txt文件中包含以字符t开头和结尾并且中间有2个任意字符的行,并显示行号;
grep -n 'goo*g' /tmp/test.txt
此命令会显示出test.txt文件中包含以字符g开头和结尾并且中间有至少1个字符o的行,并显示行号;
grep -n 'g.*g' /tmp/test.txt
此命令会显示出test.txt文件中包含以字符g开头和结尾的行,并显示行号;
限定连续重复字符{}
由于shell中字符{}有特殊意义,所以在这里要使用转移字符\
示例:
grep -n 'go\{2\}g' /tmp/test.txt
此命令会显示test.txt文件中出包含字符串goog的行,并且显示行号;
grep -n 'go\{2,5\}g' /tmp/test.txt
此命令会显示test.txt文件中出包含字符串goog,gooog,goooog或gooooog的行,并且显示行号;
遗留问题:如何找出包含2个重复英文字符形如"aa"、"bb"的行,并显示行号;
此处要用到扩展正则表达式,命令如下:
egrep -ni '([a-z])\1' /tmp/test.txt
此处的'\1'表示反向引用前面圆括号内匹配的内容
常规正则表达式元字符总结:
[] | 字符合集中的任意一个字符,[abc]匹配a或b或c |
[^] | 排除字符合集中的所有字符,[^abc]匹配除了a或b或c之外的字符 |
^ | 行首符,^hello匹配以hello开头的行 |
$ | 行尾符,hello$匹配以hello结尾的行 |
. | 匹配任意一个字符,g..d匹配g开头d结尾且中间有2个字符的字符串,如:good、glad、gadd |
* | 匹配前导字符0到无穷次,goo*g匹配gog、goog、gooog.... |
\{n,m\} | 匹配前导字符n到m次; \{n\}:匹配前导字符n次; \{n,\}:匹配前导字符至少n次; |
+ | 匹配前导字符1次或1次以上,go+g匹配gog、goog、gooog..... |
? | 匹配前导字符0次或1次,go?g匹配gg、gog |
| | 用or的方式找出数个匹配的字符串goog|hello|test匹配goog或hello或test |
() | 找出群组字符串,g(oo|la)d匹配good或glad |
()+ | 匹配()内容1次或1次以上,(very)+good匹配verygood、veryverygood.... |
()\1 | 反向引用()的内容,([a-c])\1匹配aa、bb、cc,即用()的内容代替\1 |
本文出自 “凌乱的脚印” 博客,请务必保留此出处http://leohsiung.blog.51cto.com/7081290/1205098
相关文章推荐
- Vbird的Linux私房菜学习笔记之正则表达式-sed
- Vbird的Linux私房菜学习笔记之正则表达式-grep
- Vbird的Linux私房菜学习笔记之正则表达式-awk
- <Python高级全栈开发工程师-1>学习过程笔记【181-184】正则表达式 <特殊字符><函数>
- Linux学习之——特殊字符和正则表达式
- linux学习笔记-第十二课-Shell脚本之正则表达式(一)
- Linux学习笔记(正则表达式)
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- 【Linux学习笔记九】Shell编程-正则表达式
- 《Linux命令、编辑器与Shell编程》读书笔记3-linux命令中的特殊字符和正则表达式
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- 正则表达式(regex)入门、元字符(特殊字符)学习与提高
- 正则表达式学习笔记004--连字符和范围描述符的认识与应用
- Linux学习笔记—day2(3.13)------基本命令,通配符,正则表达式
- Linux基础入门(六) --学习笔记-正则表达式
- 正则表达式学习笔记 Chapter02--匹配字符
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- linux正则表达式学习笔记
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- [linux学习笔记]第3天:变量分类,重定向,管道命令,程序执行流,文本处理类命令, 正则表达式,短路操作符