侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

linux正则表达式

2023-11-13 星期一 / 0 评论 / 0 点赞 / 53 阅读 / 5032 字

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

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

 

        grep命令用以以行为单位,对字符串进行匹配,输出符合匹配逻辑的行。grep的使用权限是所有用户。

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

-c:只输出匹配行的计数。

-I:不区分大 小写(只适用于单字符)。

-h:查询多文件时不显示文件名。

-l:查询多文件时只输出包含匹配字符的文件名。

-n:显示匹配行及 行号。

-s:不显示不存在或无匹配文本的错误信息。

-v:显示不包含匹配文本的所有行。

  • 示例:
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命令同样是以行为单位处理字符串,但是它可以对字符串进行增删改操作,然后输出至屏幕或者是文件

  • 格式: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/bash6 games:x:5:60:games:/usr/games:/usr/sbin/nologin7 man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
nl /etc/passwd | sed '2a hello' #在第三行加上hello1 root:x:0:0:root:/root:/bin/bash2 daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologinhello
nl /etc/passwd | sed -n '5,7p' #相当于 nl /etc/passwd | head -n 7 | tail -n 35 sync:x:4:65534:sync:/bin:/bin/sync6 games:x:5:60:games:/usr/games:/usr/sbin/nologin7 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.txtegrep	-n	'go?d'  test.txtegrep	-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'

 

广告 广告

评论区