正则表达式
介绍
就是专门处理字符串的方法,是以行为单位来进行字符串处理的行为,通过一些符号的辅助,让用户可以轻易的达到查找,删除,替换某特定字符串的处理程序。
是一种表示法,只要程序支持这种表示法,那么该程序就能够作为正则表达式处理之用。
语系对正则表达式是有影响的
LANG=C是:1 2 3... A B C D ....a b c d
LANG=zh_CN 0 1 2 3 a A b B....
可以看出语系不一样的所选择的结果可能会有所不同,因为他们的编码顺序不一样、
特殊符号
grep的一些高级参数
grep [ -A ][ -B] '搜寻的字符串' filename
-A 表示在所加的参数n,第n行后开始,
-B 表示在所加的参数n,第n前查找,
grep是按照行来显示,显示的是输入参数符合的那一行数据,不符合的就丢弃
基础表达式练习
情景一 查找特定的字符串
简单:
grep -n 'str_obj' filename
反向选择加 -v
情景2:利用中括号来查找集合字符
grep -n ‘t[ae]est filename
比如这里找的是test 或者tast,[]里面不论有多少个字符都只代表其中的一个
[a-z]表示小写字母,[0-9]可以表示数字,注意的是中间的那个'-‘号
^ 如果不再[]内部匹配的是开头,在里面表示反向选择, $则匹配结尾
常用的选取空行
grep -n '^$' filename
情景三:
任一个字符‘.‘和重复字符‘*'
小数点代表任意一个字符,星号代表0到无穷个字符
小数点好理解,星号不好
比如 要想选择至少两个’oo‘以上的字符串时,需要ooo* 即
当是'o*'的时候,表示是具有空字符,或者具有一个以上的'o'字符,这里空字符就是没有字符都可以的意思
当'oo*'的时候,第一个o必须存在,第二个o则是可以用可以无的多个o ,o oo ooo都是符合的
所以要至少列举两个o以上的字符串需要的是ooo*,
所以 .*可以表示0个或者多个字符的意思
情景4:
限定连续的RE字符范围:
限定范围字符是{} 但是{}有特殊含义,用\把它去掉特殊意义
grep-n ‘go\{2,5\}g' filename 寻找g后面带着2到5个o的字符串、
正则表达式的特殊字符一般在命令行输入的通配符并不相同,比如*在命令行是无穷多个字符的意思,但是在正则表达式是0到无穷个前面那个RE字符的意思