linux正则表达式

        正则表达式旨在对字符串进行匹配,这在几乎全部语言中都有用到。固然bash中天然也不例外。linux支持正则表达式的工具主要有一下几种,即:vim、grep、awk、sed等等。首先对这些命令作一下简单的介绍。linux

 

        grep命令用以以行为单位,对字符串进行匹配,输出符合匹配逻辑的行。grep的使用权限是全部用户。正则表达式

  • 格式:grep [OPTIONS] PATTERN [FILE...]
  • 主要参数:

-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

  • 格式:sed [OPTION]... {script-only-if-no-other-script} [input-file]
  • 主要参数:

-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'
相关文章
相关标签/搜索