正则表达式与grep和sed

目录

1.正则表达式

2.grep

3.sed

grep和sed需要正则表达式,我们需要注意的正则表达式与通配符用法的区分。

1.正则表达式

REGEXP,正则表达式:由一类特殊字符以及文本字符所编写的模式,其中有些字符(元字符)不表示字符字母意义,而表示控制或通配的功能,可通过man regex来查看更详细的信息。

正则表达式有两类,一个是基本正则表达式BRE,另一个是扩展的正则表达式ERE。

正则表达式的引擎:采用不同算法,检查处理正则表达式的软件模块PCRE(Perl Compatible Regular Expressions)

元字符的分类:字符匹配、匹配次数、位置锚定、分组。

1.字符匹配

.:匹配任意单个字符

[ ]:匹配指定范围内的任意单个字符([.]就是.)

[ ^ ]:匹配指定范围外的任意单个字符

[:alnum:]:字母和数字

[:alpha:]:代表任何英文大小写字符,亦即 A-Z, a-z

[:lower:]:小写字母 [:upper:] 大写字母

[:blank:]:空白字符(空格和制表符)

[:space:]:水平和垂直的空白字符(比[:blank:]包含的范围广)

[:cntrl:]:不可打印的控制字符(退格、删除、警铃...) )

[:digit:]:十进制数字 [:xdigit:] 十六进制数字

[:graph:]:可打印的非空白字符

[:print:]:可打印字符

[:punct:]:标点符号

2.匹配次数

匹配次数是用在要指定次数的字符后面,用于指定前面的字符要出现的次数。

*:匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配

.*:任意长度的任意字符

\?:匹配其前面的字符0 或1次

\+:匹配其前面的字符至少1次

\{n\}:匹配前面的字符n次 次

\{m,n\}:匹配前面的字符至少m 次,至多n次 次

\{,n\}:匹配前面的字符至多n次

\{n,\}:匹配前面的字符至少n次

3.位置锚定

位置锚定是用于定位出现的位置。

^:行首锚定,用于模式的最左侧

$:行尾锚定,用于模式的最右侧

^PATTERN$:用于模式匹配整行

^$:空行

^[[:space:]]*$:空白行

\< 或 \b:词首锚定,用于单词模式的左侧

\> 或 \b:词尾锚定;用于单词模式的右侧

\<PATTERN\>:匹配整个单词

4.分组

分组:\(\)将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+。分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1, \2, \3, ...\1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符。

示例\(string1\+\(string2\)*\);\1 :string1\+\(string2\)*;\2 :string2

后向引用:引用前面的分组括号中的模式所匹配字符 , 而非模式本身。

\|:或者

示例a\|b:a 或b;C\|cat: C 或cat ;\(C\|c\)at:Cat 或cat

5.扩展的正则表达式

扩展的正则表达式,顾名思义,就是在正则表达式上的扩展,是在元字符匹配方面的写法简化。

大部分的元字符和正则表达式相同,这里把不同的记录一下:

字符匹配:

[ ]:指定范围内的字符。

次数匹配:

?:0 或1次

+:1 次或多次

{m}:匹配m次

{m,n}:至少m ,至多n次

分组:

() 将一个或多个字符捆绑在一起,当作一个整体进行处理。

|:或者

示例:a|b:a 或b;C|cat:C 或cat;(C|c)at:Cat 或cat

上述就是我所知道的正则表达式内容了,可能有所遗漏,大家可以通过man帮助补足,下面我们看进入正题,也就是运用上了。

2.grep

grep:Global search REgrular expression and Print out the line

grep 的作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查,并打印匹配到的行。

grep的模式:由正则表达式字符及其文本字符所编写的过滤条件。

grep的用法:

grep [OPTION]... PATTERN [FILE]...

grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

常用的[option]:

--color=auto:对匹配到的文本着色显示

-v:显示不被pattern 匹配到的行,反向选择

-i:忽略字符大小写

-n:显示匹配的行号

-c:统计匹配的行数

-o:仅显示匹配到的字符串

-q:静默模式,不输出任何信息

-A #:after,后#行 ,显示包含这行后续#行

-B #:before,前#行

-C #:context,前后各#行

-e:实现多个选项间的成逻辑or关系,grep –e ‘cat ’ -e ‘dog’ file

-w:匹配整个单词,(字母,数字,下划线不算单词边界)

-E:使用ERE

-F:相当于fgrep ,不支持正则表达式

-l <范本样式>:列出文件内容符合指定的范本样式的文件名称。

-h <范本样式>:在显示符合范本样式的那一列之前,不标示该列所属的文件名称。

-H <范本样式>:在显示符合范本样式的那一列之前,标示该列的文件名称。

-e <范本样式>:指定字符串作为查找文件内容的范本样式。

上述选项中有个-E选项,这个就是可以支持使用扩展的正则表达式,当然这个选项有另个写法:grep -E == egrep

还有个-F选项,这个用法是相当于fgrep的,即grep -F==fgrep不支持正则表达式的使用,也就是使用它时,你可以使用通配符。

举个示例:

grep的用法多种多样,大家可以多加尝试!

3.sed

sed:Stream EDitor,又名行编辑器。

sed:是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓存区中,称为“模式空间”(patternspace),接着用sed命令处理缓存区中的内容,处理完成后,把缓存区的内容送往屏幕。然后读入下一行,执行下一个循环。如果没有使用诸如‘D’的特殊命令,那么会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

sed的功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等,且支持正则表达式!

使用方法:

sed [OPTION]... {script-only-if-no-other-script} [input-file]...

常用[option]:

-n:不输出模式空间内容到屏幕,即不自动打印

-e:多点编辑,-e sm2 -e sm1

-f /PATH/SCRIPT_FILE:从指定的脚本文件中,读取出脚本内容,并合并到sed COMMAND中进行执行。通俗的理解为将脚本写在了文件中。

-r:支持使用扩展正则表达式

-i:直接修改源文件。如果在命令中加入了 -i 选项,源文件的内容将会被直接修改掉。

-i[SUFFIX]:这还是-i 选项,这个选项的意思是说,如果在使用该选项的过程中指定了后缀名称,那么该命令在执行的过程中会先将源文件备份成以[SUFFIX] 为后缀的文件,然后对文件进行操作

从使用方法中看到了{script-only-if-no-other-script},这个代表了在模式空间和保留空间的处理过程,也就是怎么处理的,这里称为了script。那么这个script是什么呢?怎么书写呢?下面就来说下有关地址定界、编辑命令、高级编辑命令,这些就是组成scrip的元素。

地址定界:就是说明用来处理一行中的那个些部分的。

不给地址:对全文进行处理

#:指定的行/pattern/能够被模式匹配到的每一行

#,#:从第n行到第m行

#,+#:从第n行,加上其后面m行

/pat1/,/pat2/:符合第一个模式和第二个模式的所有行

#,/pat1/:从第n行到符合 /pat1/ 这个模式的行

1~2 :~ 这个符号表示步进,1~2 表示的是奇数行

2~2:表示的是偶数行

编辑命令:地址定界后,对范围内的内容进行相关编辑。

d:删除模式空间匹配的行,并立即启用下一轮循环

p:打印当前模式空间内容,追加到默认输出之后

q:读取到指定行之后退出

a [\]text:在指定行后面追加文本支持使用\n 实现多行行后追加

i [\]text:在行前面插入文本

c [\]text:替换行为单行或多行文本

w /path/somefile:保存模式匹配的行至指定文件

r /path/somefile:读取指定文件的文本至模式空间中匹配到的行后

=:为模式空间中的行打印行号

!:模式空间中匹配行取反处理

s///:查找替换, 支持使用其它分隔符,s@@@ ,s###

:对一行进行多次操作的命令的分割

&:配合s///使用,代表前面所查找到的字符等,&sm ;sm&。

g:行内全局替换。也可以指定行内的第几个符合要求的进行替换:2g,就表示第2个替换。

p:显示替换成功的行

w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中

高级编辑命令:也是对定界范围内的内容进行处理了,不过是处理起来更加高级。

P:打印模式空间开端至\n 内容,并追加到默认输出之前

h:把模式空间中的内容覆盖至保持空间中;m > b

H:把模式空间中的内容追加至保持空间中; m>>b

g:从保持空间取出数据覆盖至模式空间; b>m

G:从保持空间取出内容追加至模式空间; b>>m

x:把模式空间中的内容与保持空间中的内容进行互换; m <->b

n:读取匹配到的行的下一行覆盖至模式空间; n>m

N:读取匹配到的行的下一行追加至模式空间; n>>m

d:删除模式空间中的行; delete m

D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的 输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d 命令那样启动正常的新循环

看着有点有,这里写几个用法示例:

sed ‘2p’ /etc/passwd

sed –n ‘2p’ /etc/passwd

sed –n ‘1,4p’ /etc/passwd

sed –n ‘/root/p’ /etc/passwd

sed –n ‘2,/root/p’ /etc/passwd

sed -n ‘/^$/=’ file

sed –n –e ‘/^$/p’ –e ‘/^$/=’ file

sed ‘/root/a\superman’ /etc/passwd

sed ‘/root/i\superman’ /etc/passwd

sed ‘/root/c\superman’ /etc/passwd

sed ‘/^$/d’ file

sed ‘1,10d’ file

nl /etc/passwd | sed ‘2,5d’

nl /etc/passwd | sed ‘2a tea’

sed 's/test/mytest/g' example

sed –n ‘s/root/&superman/p’ /etc/passwd

sed –n ‘s/root/superman&/p’ /etc/passwd

sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets

sed –i.bak ‘s/dog/cat/g’ pets

sed -n 'n;p' FILE

sed '1!G;h;$!d' FILE

sed 'N;D‘ FILE

sed '$!N;$!D' FILE

sed '$!d' FILE

sed ‘G’ FILE

sed ‘g’ FILE

sed ‘/^$/d;G’ FILE

sed 'n;d' FILE

sed -n '1!G;h;$p' FILE

上面这些示例大家可以都尝试下,多尝试就知道什么意思了!

上述所有内容就是我所知道的有关grep和sed以及配合正则表达式的用法了,它们功能很强大,能处理绝大部分的文本、文件问题。若上述有那些不对的地方,欢迎指出,谢谢!

正则表达式与grep和sed的更多相关文章

  1. Linux基础-正则表达式整理---------------grep、sed、awk

    目录:    Ⅰ:正则表达式    Ⅱ:作业 Ⅰ:正则表达式 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 在lin ...

  2. Linux基础之-正则表达式(grep,sed,awk)

    一. 正则表达式 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式是对字符串操作的一种逻辑公 ...

  3. 正则表达式(grep,awk,sed)和通配符

    1. 正则表达式 1. 什么是正则表达式? 正则表达式就是为了处理大量的字符串而定义的一套规则和方法. 通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串. Linux正则 ...

  4. 正则表达式利用grep和sed处理日志内容,获取所需的内容

    app.log文件内容: 2014-09-11 00:00:01,516 INFO [com.tt.bb.thread.Control] - Socket连接:/182.105.83.33:53217 ...

  5. grep、sed、awk、perl、js、vim等对正则表达式的支持的差别

    grep.sed.awk.perl等对正则表达式的支持的差别 grep 2.5.1 egrep 2.5.1 sed 3.02 sed 4.07 awk 3.1.1 perl 5.8.0 vim 6.1 ...

  6. Linux正则表达式,grep总结,sed用法

    原文: 1.sed   流编辑器,实现对文字的增删改替换查(过滤.取行),能同时处理多个文件多行的内容,可以不对原文件改动,把整个文件 输入到屏幕,可以把只匹配到模式的内容输入到屏幕上.还可以对原文件 ...

  7. 强大的grep,sed和awk--用案例来讲解

    准备工作: 先简单了解grep,sed和awk功能 1) grep 显示匹配特定模式的内容 grep -v 'boy' test.txt 过滤掉test.txt文件的boy,显示其余内容 grep ' ...

  8. Linux文本三剑客超详细教程---grep、sed、awk

    awk.grep.sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单 ...

  9. shell脚本-正则、grep、sed、awk

    ----------------------------------------正则---------------------------------------- 基础正则 ^word ##搜索以w ...

随机推荐

  1. 文件系统的几种类型:ext3, swap, RAID, LVM

    分类: 架构设计与优化 1.  ext3 在异常断电或系统崩溃(不洁关机, unclean system shutdown  ).每个已挂载ext2文件系统计算机必须使用e2fsck程序来检查其一致性 ...

  2. MySQL (三)-- 字段属性、索引、关系、范式、逆规范化

    1 字段属性 主键.唯一键和自增长. 1.1 主键 主键:primary key,一张表中只能有一个字段可以使用对应的键,用来唯一的约束该字段里面的数据,不能重复. 一张表只能有最多一个主键. 1.1 ...

  3. 集美大学网络1413第十三次作业成绩(团队八) -- 第二次项目冲刺(Beta阶段)

    题目: 团队作业8--第二次项目冲刺(Beta阶段) 团队作业8-成绩:  团队/分值 新加入成员 角色 技术特点 改善的功能. 原因. bug 新增功能. 方法. 如何实现 团队分工改进. 原因 改 ...

  4. 201521123061 《Java程序设计》第九周学习总结

    201521123061 <Java程序设计>第九周学习总结 1. 本周学习总结 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1 ...

  5. Java 第七周总结

    1. 本周学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 我们知道ArrayList是允许重复的,有序的元素的集合,但当我们想用它来放 ...

  6. 201521123106 《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...

  7. 201521123028 《Java程序设计》第13周学习总结

    本周学习总结 书面作业 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? Ans:cec.jmu.edu ...

  8. JAVA课程设计-购物车 (201521123101 柏清晔)

    1.团队课程设计博客链接 /[团队博客链接]http://www.cnblogs.com/yayaya/p/7062197.html 2.个人负责模板或任务说明 1.连接数据库 2.修改购物车的jsp ...

  9. Java多线程高并发学习笔记(二)——深入理解ReentrantLock与Condition

    锁的概念 从jdk发行1.5版本之后,在原来synchronize的基础上,增加了重入锁ReentrantLock. 本文就不介绍synchronize了,有兴趣的同学可以去了解一下,本文重点介绍Re ...

  10. linux 环境NTP配置与开机自启动(转)

    Linux下配置NTP服务器一.前言:    默认NTP服务端口:    UDP/123    本文配置的NTP工作模式:    使用client/server方式,该方式适用于一台时间服务器接收上层 ...