Linux学习总结: 正则表达式

Posted ywendeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习总结: 正则表达式相关的知识,希望对你有一定的参考价值。

1、什么是正则表达式
  正则表达式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊的符号的辅助,可以让用户轻易达到查找、删除、替换某特定字符串的处理程序。正则表达式基本上是一种“表示法”,只要工具程序支持这种表示法,那么该工具程序就可以用来作为正则表达式的字符串处理之用。常用的工具有vi、grep 、awk 及sed 等。
  
2、语系对正则表达式的影响
  在使用正则表达式时,需要特别注意当时的环境的语系为何,否则可能会发现与别人的不相同的选取结果。通常用的语系设置是 “LANG=C”
  另外为了避免因为语系的不同英和数字的选取问题,我们需要记住以下一些常用的特殊符号

特殊符号代表意义
[:alnum:]代表英文大小写及数字,即0-9、 A-Z、a-z
[:alpha:]代表英文大小写字符,即 A-Z,a-z
[:digit:]代表数字 即 0-9
[:lower:]代表小写字母 a-z
[:upper:]代表大写字母 A-z

备注:查找字符串的常用操作示例

//查找在文本中不包含字符的操作使用-v 其中n 表示显示 
grep -vn 'the' regular_express.txt
//忽略大小写的操作
grep -in 'the' regular_express.txt

3、基础正则表达式常用操作总结

字符描述示例
\\将下一个字符标记为一个特殊字符、或一个原义字符 因为与的符号在shell中是有特殊意义的,必须要使用\\的转意它
^通常情况下表示行首,但是如果^出现在[]中则表示‘反向选择’^[a-z]表示以小写字母开头的行,^[^a-zA-Z] 表示不以字母开头的行
.代表一定有一个任意字符的字符例如:grep -n ‘e.e’ test.txt 可以匹配到exe ,eae等
行尾符google$ 表示以google 结尾的行
*匹配前一个字符(前面的子表达式)零次或多次例如,zo* 能匹配 “z” 以及 “zoo”。 * 等价于0,。
nn 是一个非负整数。匹配确定的 n 次例如:’o2’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
n,n 是一个非负整数。至少匹配n 次例如:’o2,’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。’o1,’ 等价于 ‘o+’。’o0,’ 则等价于 ‘o*’。
n,mm 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次例如: “o1,3” 将匹配 “fooooood” 中的前三个 o。’o0,1’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。

4、扩展正则表达式常用操作总结

字符描述示例
+匹配前一个字符(前面的子表达式)一次或多次例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 1,。
匹配前面的子表达式零次或一次例如,”do(es)?” 可以匹配 “do” 或 “does” 中的”do” 。? 等价于 0,1。
|用或(or)的方式找出数个字符串例如:搜寻gd或good这两个字符串egrep -n ‘gd|good’ test.txt
()找出群组字符串例如:搜寻(glad)或者(good)这两个字符串,因为g与d是重复的,所以,我就可以将la与oo列于()当中,并以
()+多个重群组的判别例如:将AxyzxyzxyzxyzC用echo叫出,然后再使用如下方法搜寻 egrep ‘A(xyz)+C’ test.txt上面的例子意思是说,我要找开头是A结尾是C,中间有一个以上的“xyz”字符串的意思。

备注:如果包含了扩展正则表达式中的符号,则需要使用egrep

以上是关于Linux学习总结: 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习总结: 正则表达式

Linux学习总结: 正则表达式

6.14学习总结

Linux学习-正则表达式与文本搜索

Linux 学习总结(84)—— 回顾下正则表达式

正则表达式:数字开头中间字母结尾数字