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,}。
{n} n 是一个非负整数。匹配确定的 n 次 例如:’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次 例如:’o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。’o{1,}’ 等价于 ‘o+’。’o{0,}’ 则等价于 ‘o*’。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次 例如: “o{1,3}” 将匹配 “fooooood” 中的前三个 o。’o{0,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)