正则表达式与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. 没有闲话和grunt.initConfig()

    grunt.initConfig()为Gruntfile.js的核心部分,它接收对象作为参数. 对象包含两种类型的属性,一种是单纯的变量,一种是task类型.举个栗子: grunt.initConfi ...

  2. C# 委托、匿名方法、lambda简介

    在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆.我想下面的代码能证实这点.下面哪一个First会被编译?哪一个会返回我们需要的结果?即Customer.ID=5.答案是6个First不 ...

  3. 换个角度审视NAT技术

    NAT (Network address translation,网络地址转换 )是局域网连接到互联网的一个对接工作. 首先要知道NAT是一个技术或者说软件而不是协议 后面你会知道NAT 是偏应用层但 ...

  4. HTML特殊符号、常用字符实体

    HTML特殊符号对照表.常用的字符实体 最常用的字符实体 显示结果 描述 实体名称 实体编号   空格     <</td> 小于号 < < > 大于号 > ...

  5. MPLS VPN随堂笔记3

    跨域 ASBR之间运行MPBGP 1.配置AS内部IGP保证环回口互相可达,同时建立LDP邻居 (优先启用 mpls label rang 16 100)方便查看实验现象 2.配置PE1-PE2 PE ...

  6. 【Alpha】——Third Scrum Meeting

    一.今日站立式会议照片 二.每个人的工作 成员 昨天已完成的工作 今天计划完成的工作 李永豪 基本完成添加功能 继续完善添加功能 郑靖涛 基本完成删除功能 继续完善删除功能 杨海亮 基本完成查找功能 ...

  7. 201521123035《Java程序设计》第四周学习总结

    本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 本周还讲了注释与类设计.老师用例子向我们展示实际生活中一个类里面包含了哪些属性,并由此联想到如果自 ...

  8. JAVA课程设计---学生基本信息管理系统(201521123039 王兴)

    1.团队课程设计博客链接 http://www.cnblogs.com/zyjjj/p/7061880.html 2.个人负责模块或任务说明 函数 功能说明 Search 查找学生信息,分为两种查找方 ...

  9. Angular4 后台管理系统搭建(9) - 用自定义angular指令,实现在服务端验证

    最近这段时间发现,北京这用angular4 或 angular2的公司很少.几乎是没有.很担心自己是不是把精力放到了不应该的地方.白耽误了时间.但是随着我对新版angular框架理解的加深.个人感觉a ...

  10. .NET Excel导出方法及其常见问题详解

    摘要:.NET Excel导出方法及其常见问题详解. 一.Excel导出的实现方法 在.net 程序开发中,对于Excel文件的导出我们一共有三种导出方式: 利用文件输出流进行读写操作 这种方式的导出 ...