正则表达式

正则表达式的学习就是不断的去实践,单纯的理论学习,小白是掌握不了,看了两天书,现在总结一下,要不然过几天就忘了,时不时可以自己翻翻总结复习下。

第一、基础正则表达式

语系对正则表达式的影响,不同语系的选取结果不同,这个需要注意下

LANG=C时:0123456.。。ABCD。。。abcd

LANG=zh_CN时:0123456..aAbBcC

【A-Z】第一种确实找到所有的大写字母,但第二种小写字母也会选取出来

特殊符号需要了解下格式 中括号里面前后都是冒号,中间放字符串

  [:alnum:] 代表英文大小写和数字

[:alpha:]代表任何英文大小写字符,还有很多不一一列举了,可以自己百度搜索下

重要的几个需要记住 

upper 代表大写字符

lower 代表小写字符

digit 代表数字而已

2)grep 的高级参数,

-A,后面可加数字,列出该行外,后续的n行也 列出来

-B 同上,前面的农行也列出来

上案例:查找特定字符串

dmesg | grep 'eth'#找到dmesg内容行中带有eth的行显示出来

改版:

dmesg | grep -A3 -B3  'eth',将第一个结果的第一条记录的前三行,和最后一条记录后三行都显示出来。

grep  -n 'the' a.txt #找出文件中有the的记录行,并显示行号

反转参数 -v

grep  -vn 'the' a.txt #上述内容以外的其他行显示出来

忽略大小写-i

grep -in 'the' a.txt #忽略大小写,把所有的the记录都显示出来

3)利用中括号[]查找集合字符

grep -n 't[ae]st a.txt #查找tast,或者test 的记录行,

grep -n 'oo' a.txt #查找包含oo的记录行

grep -n '[^g]oo' a.txt #文件中包含oo但前面不是g的记录行

grep -n '[^a-z]oo' a.txt #文件中包含oo前面字符不是小写字母的记录行

可以列用特殊符号实现grep -n '[^[:lower:]]oo' a.txt

grep -n '[0-9]' a.txt #文件中包含数字的记录行

特殊符号:grep -n '[[:digit:]]' a.txt

注意中括号,虽然第二个没有接oo,但是也是需要包在中括号里面,其中[:digit:] 等价于 0-9 

4)行首^和行尾$

^这个符号要特别注意,如果放到中括号里面,表示反向,如果放到外面(字符串除外,不设计中括号),表示行首,上案例

grep -n '^the' a.txt #选取the开头的记录行

grep -n '^[a-z]' a.txt #选取小写字母开头的记录行

替换:grep -n '^[[:lower:]] a.txt #自己和上面的对比哪里不同哈

grep -n '^[^a-zA-Z]' a.txt #开头不是字母的记录行

替换 grep -n '^[^[:alpha:]]' a.txt

2)行尾$,上案例

grep -n '\.$' a.txt #文件中以.结尾的记录行,小数点具有其他意义,所有需要有反斜杠\转义

之前想实现的知识点,读取文件的第10行到第20行

cat -n a.txt |head -n 20 |tail -n 10,#很多方法,下次介绍另一个方法

grep -n '^$' a.txt #去掉所有空行

grep -n '^$' a.txt |grep -v '^#' #去掉空行后,选择不是#开头的记录行

3)“.”和“*”的使用 点 和 星 

点:一定有一个任意字符

星:重复前一个0到无穷多次的意思,上案例,星需要和前面字符组成才可以,重点看案例

grep -n 'g..d' a.txt #选择g开头,d结尾,中间有个2个字符的记录行

grep -n 'ooo*' a.txt #此处o*是组合,不可拆分解释,选取有连续两个o以上的记录行,注意是两个

不是三个,以为o*可以是0个o,所有至少是两个o以上的,可以多个o的记录行

grep -n 'goo*g a.txt #选取go后面又0个或者多个o,最后g结尾的记录行

grep -n 'g.*g' a.txt #在选择开头结尾g,中间任意字符的记录行,可以没有,容易写成‘g*g',这么写就包含开头或者结尾只有一个g的 记录行了,不符合选取条件了。

4)限定字符范围{}

grep -n   ‘o\{2\}’ a.txt #选取包含2个o的记录行

grep -n 'o\{2,5\}' a.txt #选取包含2到 5个o的记录行

grep -n 'o\{2,\}' #选取包含2个o以上的记录行

关于^的说明

小白学习这个时候有点乱,所以做个测试案例,大家可以参考看下区别

正则表达式_第1张图片

如图可以看出,如果不加【】的字符串,是表示行首,加【^】表示取反

下次介绍sed工具,非常好用的工具。今天先写到这吧。

 

 

你可能感兴趣的:(正则表达式)