正则表达式旨在对字符串进行匹配,这在几乎全部语言中都有用到。固然bash中天然也不例外。linux支持正则表达式的工具主要有一下几种,即:vim、grep、awk、sed等等。首先对这些命令作一下简单的介绍。linux
grep命令用以以行为单位,对字符串进行匹配,输出符合匹配逻辑的行。grep的使用权限是全部用户。正则表达式
-c:只输出匹配行的计数。vim
-I:不区分大 小写(只适用于单字符)。bash
-h:查询多文件时不显示文件名。app
-l:查询多文件时只输出包含匹配字符的文件名。函数
-n:显示匹配行及 行号。工具
-s:不显示不存在或无匹配文本的错误信息。this
-v:显示不包含匹配文本的全部行。google
grep -n 'the' test.txt #n显示行号 8:I can't finish the test. 12:the symbol '*' is represented as start. 15:You are the best is mean you are the no. 1. 16:The world <Happy> is the same with "glad". 18:google is the best tools for search keyword.
grep -nvi 'A' test.txt #v是选择不知足条件的项、i不区分大小写 4:this dress doesn't fit me. 13:Oh! My god! 17:I like dog. 19:goooooogle yes! 20:go! go! Let's go.
sed命令一样是以行为单位处理字符串,可是它能够对字符串进行增删改操做,而后输出至屏幕或者是文件spa
-n :使用安静(silent)模式。在通常 sed 的用法中,全部来自 STDIN 的数据通常都会被列出到终端上。但若是加上 -n 参数后,则只有通过sed 特殊处理的那一行(或者动做)才会被列出来。 -e :直接在命令列模式上进行 sed 的动做编辑; -f :直接将 sed 的动做写在一个文件内, -f filename 则能够运行 filename 内的 sed 动做; -r :sed 的动做支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法) -i :直接修改读取的文件内容,而不是输出到终端。
a :新增,在下一行新增字符串 c :取代, c 的后面能够接字串,这些字串能够取代 n1,n2 之间的行! d :删除, i :插入,在上一行新增字符串 p :列印,在每一行后面输出字符串 s :替换,相似vim的替换
nl /etc/passwd | sed '2,5d' #按行打印passwd,删除2至5行 1 root:x:0:0:root:/root:/bin/bash 6 games:x:5:60:games:/usr/games:/usr/sbin/nologin 7 man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
nl /etc/passwd | sed '2a hello' #在第三行加上hello 1 root:x:0:0:root:/root:/bin/bash 2 daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin hello
nl /etc/passwd | sed -n '5,7p' #至关于 nl /etc/passwd | head -n 7 | tail -n 3 5 sync:x:4:65534:sync:/bin:/bin/sync 6 games:x:5:60:games:/usr/games:/usr/sbin/nologin 7 man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
介绍了使用正则的几个命令,接下来就是正则表达式的基本语法:
[abc]:知足方括号其中一个 [a-z]:全体小写字母 [A-Z]:全体大写字母 [0-9]:全体数字 #在ascii表中连续就能够如此标示 [^]:对条件取反 #方括号里 ^:行首 #eg. ^the:以the单词开头的行 $:行末 #eg. \!$:以叹号结尾的行 .:任意一个符号 *:前一个符号重复任意屡次(0~无穷) {2}:限定前一符号重复次数(重复2次) {2,5}:重复2-5次
上面是这些模式是grep等工具经常使用的匹配模式,固然这些有时候并不能知足咱们的须要。所以,还有延伸正则表达式。
+:前一个字符重复一次以上 ?:零个或者是一个字符 |:或 ():意义:找出“群组”字串 范例:搜寻 (glad)或 (good)这两个字串,由于g与d是重复的,因此我就能够将la与oo列于(la|oo)当中。
要使用这些匹配模式,须要用到egrep命令,至关与grep -e
egrep -n 'go+d' test.txt egrep -n 'go?d' test.txt egrep -n 'gd|good' test.txt egrep -n 'gd|good|dog' test.txt egrep -n 'g(la|oo)d' test.txt echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C'