linux学习笔记(2)-正则表达式

来源:互联网 发布:网络招聘时间安排 编辑:程序博客网 时间:2024/05/18 00:47

这是一份linux初学者的读书笔记,没什么深刻的内容,就是写下来方便自己工作时,或在地铁上用手机查看。
内容基本基于《linux shell编程从初学到精通》第二版。

基础
  1. “*”符号,用于匹配前面的一个普通字符0次或多次
hel*o可以匹配helo,hello,helllo
  1. “.”符号,用于匹配任意一个字符
...73.前面的三个.匹配三个字符,最后的一个.匹配一个字符所以xcb73a,238734,4hs73e都可以匹配同时.还可以匹配空格,所以ui 73e也可以匹配
  1. “\^”符号,用于匹配行首的字符是^后面字符的行
^...X86*表示匹配行首的三个字符为任意字符,第4~6字符为X86第7个字符可以重复匹配6如:866X86666,8 6X86都可以匹配
  1. “$”符号,用于匹配行尾,放在字符之后
micky$ 匹配行尾是micky的行^$ 匹配空行^.$ 匹配包含一个字符的行
  1. “[]”符号,支持穷举方法匹配字符集合里的所有元素,也支持用”-“来表示范围
[0123456789] 匹配任意数字[0-9] 匹配任意数字[a-z] 匹配所有小写字母[b-p] 匹配b-p所有小写字母[^b-p] 匹配所有不在b-p里的小写字母^[b-p] 匹配所有行首是b-p里的小写字母的行^在[]里面表示取反,在[]外面才是匹配行首[A-Za-z][A-Za-z]* 可以匹配任意英文单词(注意思考)
  1. “\”符号,转义,用于屏蔽元字符的特殊意义
\. 表示匹配字符.,而不是任意一个字符
  1. “\<\>”符号,表示精确匹配
\<the\> 表示精确匹配the这个词不匹配them,there等
  1. “\{\}”符号,和*类似,但可以指定重复次数
JO\{3\}B 匹配JOOOB,重复O字符3次JO\{3,\}B 匹配JOOOOB,JOOOB,JOOOOOB,          重复O字符最少3次JO\{3,6\}B 匹配重复O字符3~6次[a-z]\{5\} 匹配5个小写字母,如house,minus等
正则表达式的扩展
  1. “?”符号,用于匹配前面的字符0次或1次,注意与*和.的区别
JO?B 匹配JOBJOOB
  1. “+”符号,匹配前面的字符最少1次,或多次
JO+B匹配JOOB,JOOOB不匹配JOB
  1. “()”和”|”,表示一组可选字符集
re(a|e|o)d 和re[aeo]d一样| 也有表示或的意思,可以连接多个正则
通配

注意同样的字符在通配下的意义和正则表达式里的意义可能是不一样的。

"*"表示任意位的字符"?"表示任意一个字符"^"表示取反
ls -l *.txt 列出文件夹下所有以.txt结尾的文件ls -l 0?.pem 列出所有0开头,后面跟1个字符,             且以.pem结尾的文件,比如00.pem,08.pemls -l [a-h]*.txt 以a-h范围内的字符为开头,                 并以.txt结尾的文件ls -l [a-h]*.[^txt]* 匹配a-h范围内开头,                     且结尾不是.txt的的文件                     注意最后一个*不能少,否则.后只匹配一个字符

“{}”表示一组表达式的集合。

ls -l {[a-h]*.txt,0?.txt}表示列出所有满足[a-h]*.txt0?.txt的文件
gerp命令

grep是支持正则表达式的文本搜索工具。

grep [选项][模式][文件]如果模式中含有空格,就要用""把模式包住grep hello world t.txt是不对的会把world也当做文件名,正确写法:grep "hello world" t.txtgrep支持多文件查询:grep "hello world" file1 file2grep "hello world" 0?.txt

grep命令的选项:

grep -c hello *.txt只输出每个文件匹配的行的数量grep -n hello *.txt输出文件名,行号,内容grep -v hello *.txt输出不包含模式的所有行grep -vc hello *.txt输出不包含模式的所有行的数量grep -i hello *.txt不区分大小写搜索grep -l hello *.txt只列出符合的文件名,不输出具体的行内容grep -ns hello *.txt只会输出满足要求的文件内容没有满足模式的不输出grep -r hello *.txtgrep默认只搜索当前文件夹里的文件-r 选项加上后就会搜索子文件夹里的文件-w 选项表示匹配整词-x 选项表示匹配整行注意-w后的所有字符都是字符本身的意思grep -w he* *.txt只匹配he*,不会匹配heegrep -q hello *.txt只返回0,1,2,不会返回具体内容0表示搜索成功1表示未搜索到满足的行2表示因为错误未能执行,比如不存在的文件
grep和正则表达式使用的一组例子
  • 如果要搜索以.txt结尾的文件中,以I love you开头的行,可以写:
grep ^"I love you" *.txtgrep -i ^"I love you" *.txt 不区分大小写搜索
  • 如果要查找某个文档中空白行(或非空白行)的数量:
grep -c ^$ t.txt 空白行数量grep -c ^[^$] t.txt 非空白行数量
  • 如果要匹配以四个字母的单词开头的行:
grep -ns ^".... " *.txt注意....后的空格
  • 如果要搜索包含www.baidu.com的行,需要使用\转义符,否则.号会被认为是任意一个字符,比如wwwbbaiduccom也会满足要求,如果只要搜索www.baidu.com,可以写:
grep "www\.baidu\.com" *.txt如果是-符号也要用\转义grep "\-\{5\}" *.txt 匹配以5个-开头的行
  • 如果是搜索以四个字母的单词为开头的行:
grep -w ^"[a-z]\{4\}" *.txt
  • 支持扩展的正则表达式需要-E选项,如以下匹配以四个字母或5个字母的单词为开头的行
grep -wE "^"[a-z]\{4\}"|^"[a-z]\{5\}"" *.txtgrep -w ^"[a-z]\{4,5\}" *.txt
原创粉丝点击