正则表达式与grep和sed
正则表达式与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的更多相关文章
- Linux基础-正则表达式整理---------------grep、sed、awk
目录: Ⅰ:正则表达式 Ⅱ:作业 Ⅰ:正则表达式 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 在lin ...
- Linux基础之-正则表达式(grep,sed,awk)
一. 正则表达式 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式是对字符串操作的一种逻辑公 ...
- 正则表达式(grep,awk,sed)和通配符
1. 正则表达式 1. 什么是正则表达式? 正则表达式就是为了处理大量的字符串而定义的一套规则和方法. 通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串. Linux正则 ...
- 正则表达式利用grep和sed处理日志内容,获取所需的内容
app.log文件内容: 2014-09-11 00:00:01,516 INFO [com.tt.bb.thread.Control] - Socket连接:/182.105.83.33:53217 ...
- 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 ...
- Linux正则表达式,grep总结,sed用法
原文: 1.sed 流编辑器,实现对文字的增删改替换查(过滤.取行),能同时处理多个文件多行的内容,可以不对原文件改动,把整个文件 输入到屏幕,可以把只匹配到模式的内容输入到屏幕上.还可以对原文件 ...
- 强大的grep,sed和awk--用案例来讲解
准备工作: 先简单了解grep,sed和awk功能 1) grep 显示匹配特定模式的内容 grep -v 'boy' test.txt 过滤掉test.txt文件的boy,显示其余内容 grep ' ...
- Linux文本三剑客超详细教程---grep、sed、awk
awk.grep.sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单 ...
- shell脚本-正则、grep、sed、awk
----------------------------------------正则---------------------------------------- 基础正则 ^word ##搜索以w ...
随机推荐
- SpringBoot学习开篇
"Spring Framework已有十余年的历史了,已成为Java应用程序开发框架的事实标准.在如此悠久的历史背景下,有人可能会认为Spring放慢了脚步,躺在了自己的荣誉簿上,再也做不出 ...
- [转载]Linux shell中的竖线(|)——管道符号
原文地址:Linux shell中的竖线(|)--管道符号作者:潇潇 管道符号,是unix一个很强大的功能,符号为一条竖线:"|". 用法: command 1 | command ...
- CentOS7中将home迁移到/下的命令
CentOS7中将home迁移到/下的命令
# mkdir -p /backup # cp -r /home/* /backup # umount /home # df -hl # fdisk -l # lvremove /dev/cento ...
- 【2017集美大学1412软工实践_助教博客】团队作业7——Alpha冲刺之事后诸葛亮
题目 团队作业7: http://www.cnblogs.com/happyzm/p/6827853.html 团队成绩 评分项目 变更管理 设计/实现 测试/发布 团队的角色,管理,合作 总结 全组 ...
- Web编程:JSP环境安装与配置
Web服务器:Tomcat 数据库服务器:暂时未使用 集成开发环境:eclipse 要运行JSP程序,首先要安装JDK(Java Developer Kit),并且还要配置运行Java程序的环境变量. ...
- 团队作业4——第一次项目冲刺(Alpha版本)2017.4.25
在下午的1,2节软件课程结束后,我们teamworkers全体队员在禹州楼302利用课间时间进行约15分钟的短暂会议,会议的内容为阐述昨天开发遇到的问题,大家都提出自己的看法,最后统一了意见,队员互相 ...
- 201521123077 《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 泛型类 利用泛型可以写出一个更加通用的类,比如下面的例子: class simpleHolder<T&g ...
- 201521123070 《JAVA程序设计》第3周学习总结
1. 本章学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. http:/ ...
- 201521123064 《Java程序设计》第2周学习总结
1. 本章学习总结 1.学会使用码云管理代码,包括将本地的代码上传至码云,和将码云上的项目保存至本地. 2.将码云上项目保存至本地的过程中,若eclipse窗口中已有同名项目,则导入的过程中可能会出错 ...
- MySQL集群(一)之主从复制
前面学完了JDBC,接下来带大家感受一下MySQL集群!其实什么是MySQL集群?简单的说就是一群机器(服务器)的集合,它们连在一起来工作. 其实各种数据库都有自己的集群,常常的多: 我们要学习的就是 ...