文档章节

linux正则表达式

cassia_
 cassia_
发布于 2017/04/29 21:26
字数 1082
阅读 16
收藏 0

        正则表达式旨在对字符串进行匹配,这在几乎所有语言中都有用到。当然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/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'

 

© 著作权归作者所有

cassia_

cassia_

粉丝 6
博文 32
码字总数 28962
作品 0
朝阳
架构师
私信 提问
NGINX location 在配置中的优先级

location表达式类型 ~ 表示执行一个正则匹配,区分大小写 ~ 表示执行一个正则匹配,不区分大小写 ^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他location。 = 进行普通字...

酱醋茶丶
2015/10/29
46
0
linux下grep、awk和sed工具用法概览

linux下grep、awk和sed工具用法概览 在linux下,grep、awk和sed是非常强大的文本处理工具,其中grep命令主要用作文本搜索,而awk和sed命令侧重于文本的编辑等操作,另外awk本身还可以是编程语...

小陶小陶
2018/09/11
174
0
文本搜索工具 - GNU grep

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。U...

匿名
2011/11/18
2.6K
0
17个案例带你3分钟搞定Linux正则表达式

正则表达式是一种字符模式,用于在查找过程中匹配制定的字符。 元字符通常在Linux中分为两类: Shell元字符,由Linux Shell进行解析; 正则表达式元字符,由vi/grep/sed/awk等文本处理工具进...

Mr_zebra
2018/09/30
22
0
GNU grep 2.18 发布,文本搜索工具

GNU grep 2.18 发布,此版本更新内容如下: 显著加速多字节环境的使用 修复了 unibyte 环境下类似 [^^-~] 的模式的错误处理 移除了废弃的 "--mmap" 选项 修复了在多字节语言环境中快捷键 "\...

oschina
2014/04/03
566
1

没有更多内容

加载失败,请刷新页面

加载更多

IT兄弟连 HTML5教程 HTML5表单 新增的表单属性1

HTML5 Input表单为<form>和<input>标签添加了几个新属性,属性如表1。 1 autocomplete属性 autocomplete属性规定form或input域应该拥有自动完成功能,当用户在自动完成域中开始输入时,浏览器...

老码农的一亩三分地
51分钟前
5
0
OSChina 周五乱弹 —— 葛优理论+1

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享米津玄師的单曲《LOSER》: mv中的舞蹈诡异却又美丽,如此随性怕是难再跳出第二次…… 《LOSER》-...

小小编辑
今天
1K
17
nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
15
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部