正则表达式与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. Swing-JList用法-入门

    注:本文所有素材均来源于How to Use Lists,本文为该文章的学习笔记. JList是Swing中的列表控件,形状如下所示: 实际上,JList有3种不同的样式: 分别为HORIZONTAL ...

  2. 201521123025 《Java程序设计》第1周学习总结

    1. 本章学习总结 (1)对JAVA的历史有了初步了解 (2)学会安装JDK和设置JAVA_HOME,PATH,CLASSPATH环境变量 (3)范围:JDK>JRE>JVM 2. 书面作 ...

  3. 201521123040《Java程序设计》第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...

  4. 201521123068 《java程序设计》 第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 多线程的冲突:同时运行的线程需要访问共享数据(临界资源) 多线程的互斥访问:两个或两个以上的线程需要同时对同一数据 ...

  5. Thrift教程初级篇——thrift安装环境变量配置第一个实例

    前言: 因为项目需要跨语言,c++客户端,web服务端,远程调用等需求,所以用到了RPC框架Thrift,刚开始有点虚,第一次接触RPC框架,后来没想到Thrift开发方便上手快,而且性能和稳定性也不 ...

  6. Q:哪里可以注册hk域名?A:这里!这里!(小白绢挥手)

    注意!前方有一条比你妈手中的竹板还硬的推文出没······ 咳咳,清清喉咙,预备唱! (请自动代入甜蜜蜜的曲调) 甜蜜蜜你笑的甜蜜蜜  好像花儿开在春风里  开在春风里 在哪里在哪里见过你  .HK域 ...

  7. java继承涉及的动/静态绑定及隐藏

    项目中经常会用到java多态这个特性,之前只知道一些皮毛,现在发现自己对它并没有一个系统的认识,想从新梳理下自己的基础库. 看了java编程思想中对象导论,关于继承的描述:java中的类型不仅仅只是描 ...

  8. SpringMVC第六篇【校验、统一处理异常】

    Validation 在我们的Struts2中,我们是继承ActionSupport来实现校验的-它有两种方式来实现校验的功能 手写代码 XML配置 这两种方式也是可以特定处理方法或者整个Action ...

  9. Oracle-表的字段增加修改删除操作

    表结构修改 ALTER TABLE SCOTT.TEST RENAME TO TEST1--修改表名 ALTER TABLE SCOTT.TEST RENAME COLUMN NAME TO NAME ...

  10. [UIKit学习]00.关于前置知识(storyboard,UIViewController,类扩展,项目属性)

    storyboard文件的认识 用来描述软件界面 默认情况下,程序一启动就会加载Main.storyboard 加载storyboard时,会首先创建和显示箭头所指的控制器界面 IBAction和IB ...