linux 正则表达式使用
1.正则表达式概念
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
正则表达式的基本元素包括普通字符和元字符,例如,a、b、1、2 等字符属于普通字符,普通字符可以按照字面意思理解,如:a 只能理解为英文的小写字母a,没有其他隐藏含义。而*、^、[]等元字符,Shell赋予了它们超越字面意思的意义,如:*符号的字面意义只是一个符号,而实际上却表示了重复前面的字符0 次或多次的隐藏含义。因此,掌握正则表达式基本元素主要是对正则表达式中元字符意义的掌握。POSIX 标准将正则表达式分为两类:基本的正则表达式和扩展的正则表达式。
2.grep 概念
grep的全称是globalsearch regular expression(RE)andprint out the line,翻译过来就是全面搜索正则表达式并把行打印出来。其实grep并不是一个单独的程序,而是一个家族。包括grep、egrep和fgrep。egrep和fgrep在使用上与grep并没有显著的不同。egrep是grep的扩展,扩展的正则表达式。
3.grep的使用格式
grep [OPTIONS] PATTERN [FILE...]
常用的[OPTIONS]有以下几个:
-i:匹配时忽略大小写
--color:将匹配的字符串加以颜色显示
-v:显示未被模式匹配到的行
-o:只显示被模式匹配到的字符串
-A#: 表示在匹配的行后将其下面的#行也显示出来
-B#: 表示在匹配的行后将其前面的#行也显示出来
-C#: 表示在匹配的行后将其前后的#行也显示出来
-E:使用扩展正则表达式
基本正则表达式:
以下实例中使用的文本regular_express.txt内容是鸟哥网站上复制过来的。其内容如下。
"Open Source" is a good mechanismto develop programs.
apple is my favorite food.
Football game is not use feet only.
this dress doesn't fit me.
However, this dress is about $ 3183 dollars.
GNU is free air not free beer.
Her hair is very beauty.
I can't finish the test.
Oh! The soup taste good.
motorcycle is cheap than car.
This window is clear.
the symbol '*' is represented as start.
Oh! Mygod!
The gd software is a library for draftingprograms.
You are the best is mean you are the no. 1.
The world <Happy> is the same with"glad".
I like dog.
google is the best tools for search keyword.
goooooogle yes!
go! go! Let's go.
# I am VBird
使用的grep和egrep命令显示的颜色是在用户的~/.bashrc目录下定义的别名
alias grep='grep --color'
alias egrep='egrep --color'
元字符:
.:匹配任意单个字符
例如:
[root@localhostdata]# grep 'g..g' regular_express.txt
google is the best tools for search keyword.
*:表示匹配其前面的字符任意次
例如:
[root@localhostdata]# grep 'goo*g' regular_express.txt
google is the best tools for search keyword.
goooooogle yes!
.*:任意长度的任意字符
例如:
[root@localhostdata]# grep 'goo.*g' regular_express.txt
"OpenSource" is a good mechanism to develop programs.
google is thebest tools for search keyword.
goooooogle yes!
\?:匹配其前面的字符1次或0次
例如:
[root@localhostdata]# grep 'gooo\?g' regular_express.txt
google is thebest tools for search keyword.
\+:其前面的字符至少出现一次
例如:
[root@localhostdata]# grep 'goo\+' regular_express.txt
"OpenSource" is a good mechanism to develop programs.
Oh!The soup taste good.
google is thebest tools for search keyword.
goooooogle yes!
\{m\}:精确匹配其前面的字符为m次
例如:
[root@localhostdata]# grep 'goo\{2\}' regular_express.txt
goooooogleyes!
\{m,n\}:匹配其前面的字符至少m次,至多n次
例如:
[root@localhostdata]# grep 'goo\{2,5\}' regular_express.txt
goooooogle yes!
[]:指定匹配范围内的任意单个字符
例如:
[root@localhostdata]# grep '[HEF]' regular_express.txt
Footballgame is not use feet only.
However,this dress is about $ 3183 dollars.
Her hair isvery beauty.
Theworld <Happy>is the same with "glad".
[^]:指定匹配范围外的任意单个字符
例如:
[root@localhostdata]# tail -2 regular_express.txt|grep '[^A-Za-z]'
# I amVBird
以下是一些常用的特殊字符,就不一一举例了
[[:space:]]:其中[:space:]表示空白字符这个范围,再加上一个[]表示匹配空白字符
[[:punct:]]:标点符号
[[:lower:]]:小写字母
[[:upper:]]:大写字母
[[:alpha:]]:大小写字母
[[:digit:]]:数字
[[:alnum:]]:数字和大小写字母
针对位置锚定:
^:锚定行首,表示^后面的任意内容必须出现在行首
例如:
[root@localhostdata]# grep '^go' regular_express.txt
google isthe best tools for search keyword.
goooooogleyes!
go! go!Let's go.
$:锚定行尾,表示$前面的任意内容必须出现在行尾
^$:表示空白行
例如:
[root@localhostdata]# grep '^$' regular_express.txt |wc -l
\<或\b:锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b:锚定词尾,其前面的任意字符必须作为单词尾部出现
例如:
[root@localhostdata]# grep '^\<root\>' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@localhostdata]# grep '^\broot\b' /etc/passwd
root:x:0:0:root:/root:/bin/bash
分组:
\(\):例如\(ab\)*表示匹配ab可以出现任意次,代表匹配ab这个组合,主要后向引用)
例如:
[root@localhostdata]# grep "\(ab\)\{2,3\}" ./fith.txt
abababx
ababababxy
xyababaxbababy
后向引用:模式中,如果使用\(\)实现了分组,在某行文本的检查中,如果\(\)的模式匹配到某内容,此内容后面的模式可以被引用
\1:表示第1个小括号中出现的内容
\2:表示第2个小括号中出现的内容
....
例如:
[root@localhostdata]# cat test
helove his lover
shelike her lover
helike is liker
shelove her liker
helike him
[root@localhostdata]# grep '\(l..e\).*\1' test
helove his lover
helike is liker
此处小括号是(l..e),\1就表示前面小括号出现的是love,\1就代表是love,小括号
中是like,\1就代表是like
扩展正则表达式:
扩展正则表达式,大部分元字符等与基本的正则表达式都相同,一些特殊的如下:
?:不需要使用\,匹配其前面的字符1次或0次
例如:
[root@localhostdata]# egrep 'goooo?' regular_express.txt
goooooogle yes!
+:其前字符至少一次,相当于基本正则表达式的\{1,\}
例如:
[root@localhostdata]# egrep 'goo+' regular_express.txt
"OpenSource" is a good mechanism to develop programs.
Oh!The soup taste good.
google is thebest tools for search keyword.
goooooogle yes!
{m,n}:不需要使用\,匹配其前面的字符至少m次,至多n次
例如:
[root@localhostdata]# egrep 'go{4,6}' regular_express.txt
goooooogle yes!
():分组
例如:
[root@localhostdata]# egrep '(oo){3,5}' regular_express.txt
goooooogle yes!
|:或者 如a|b,a或者b,是整个左侧或右侧
ab|cd:代表ab或cd
a(b|c)d
fgrep:不支持正则表达式:
后面跟的任意模式都帮他当作字符去匹配,其速度较快,如果不需要正则表达式搜索,则可以使用它
例如:
[root@localhostdata]# fgrep --color 'gooo' regular_express.txt
goooooogleyes!
以上简单的列出了正则表达式的一些使用方法,要熟练掌握,还需要多加练习。
linux 正则表达式使用的更多相关文章
- linux正则表达式之-基础正则表达式(基于grep)
linux正则表达式: 简单的说,正则表达式就是为处理大量的字符串而定义的一套规则和方法,如:假设@代表123456,!代表abcde.通过定义的这些特殊符号的铺助,系统管理员就可以快速的过滤,替换或 ...
- 关于清晰讲解linux正则表达式的博文分享
http://www.cnblogs.com/chengmo/archive/2010/10/10/1847287.html linux shell 正则表达式(BREs,EREs,PREs)差异比 ...
- Linux正则表达式grep与egrep
grep -io "http:/=[A-Z0-9]\{16\}" ./wsxf.txt >wsxf_urls.txt Linux正则表达式grep与egrep 正则表达式:它 ...
- 【Linux】linux正则表达式及通配符
正则表达式就是用于匹配每行输入的一种模式,模式是指一串字符序列.拥有强大的字符搜索功能.也非常方便的搜索过滤出我们想要的内容. linux正则表达式分为基本正则表达式(Basic Regexp)和扩展 ...
- Linux 正则表达式_010
Linux 正则表达式 标注:本教程只针对linux运维的三剑客命令awk,sed,grep正则表达式 什么是正则表达式? 简单的说,正则表达式就是为处理大量的字符串而定义的一套规则和方法通过定义的这 ...
- linux正则表达式(基础正则表达式+扩展正则表达式)
正则表达式应用非常广泛,例如:php,Python,java等,但在linux中最常用的正则表达式的命令就是grep(egrep),sed,awk等,换句话 说linux三剑客要想能工作的更高效,就一 ...
- linux 正则表达式和通配符
linux 正则表达式和通配符 通配符用于查找文件 包含三种: * ? [] * 代表任意个任意字符 ? 代表任意一个字符 [] 代表中括号中的一个字符 正则表达式(正则是包含匹配,只要包含就可以匹 ...
- 七 、linux正则表达式
为处理大量的字符串而定义的一套规则和方法 1)linux正则表达式以行为单位处理 2)alians grep = “grep –color=auto”,让匹配的内容显示颜色 3)注意字符集,expor ...
- (转)linux正则表达式详解
linux正则表达式详解 http://blog.csdn.net/wuliowen/article/details/64131815 1:什么是正则表达式: 简单的说,正则表达式就是处理字符串的方法 ...
- linux正则表达式企业级深度实践案例1
linux正则表达式结合三剑客企业级实践: 1.取系统ip [root@redhat~]# ifconfig eth0 解答: 替换命令: sed 's#支持正则位置##g' file 先取第 ...
随机推荐
- 使用Jenkins配置自动化构建
持续集成是个简单重复劳动,人来操作费时费力,使用自动化构建工具完成是最好不过的了. 为了实现这个要求,我选择了Jenkins. 从http://mirrors.jenkins-ci.org/windo ...
- UICollectionLayout布局 —— UIKit之学习UICollectionView记录二《流水布局》
重点知识 一. 加载collectionView注意事项 1.创建collectionView,有两种方式 :一种是xib和一种是纯代码:设置代理和数据源,注册cell,配置流水布局的属性,如上.下. ...
- CentOS系统yum源使用报错:Error: Cannot retrieve repository metadata (repomd.xml) for repository: rpmforge.
服务器上的yum突然不好使用,使用yum的时候报错如下:[root@bastion-IDC src]# yum list......Could not retrieve mirrorlist http ...
- [LeetCode] Construct Binary Tree from Inorder and Postorder Traversal 由中序和后序遍历建立二叉树
Given inorder and postorder traversal of a tree, construct the binary tree. Note: You may assume tha ...
- SQL中使用or影响性能的解决办法
近期做了一个存储过程,执行时发现非常的慢,竟然需要6.7秒! 经排查,发现时间主要都耗在了其中一段查询语句上.这个语句用于查出结构相同的两个表中,其中两个字段的任一个字段数据相同的记录. 例如,A表的 ...
- Android----消息弹出框
关于Android的知识,自从工作了就没有什么时间去总结学习过的知识,我个人比较喜欢学习后总结,今天就写一下关于android中消息弹出框的几种方式的简单示例,按照自己的思路写了一段,希望对和我一样在 ...
- 虚拟机下Centos7如何设置静态IP地址
最近在学习linux环境部署~~~~ 首先,将网络适配设置成为桥接模式 查看本机IP地址,ipconfig,记住ipv4地址和默认网关地址,等会配置的时候要用 启动Centos,进入终端模式,设置IP ...
- java利用JDK调用并执行js源码
前言: 不同开发语言之间具有通用性,更具有协作调用的可能.有时候对于一些场景会有调用js的需求,因此下面展示了一个java利用自身JDK调用js函数的demo,供感兴趣的朋友参考. js函数文件 ex ...
- QPS 与 TPS 简介
QPS:Queries Per Second意思是"每秒查询率",是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准. TPS是Tra ...
- CSS Hack
CSS HACK,网上有很多,主要是IE版本不同造成的,尽量不要用CSS HACK,实在调不过去可以用一用,相信以后随着IE低版本的淘汰,CSS HACK也将不在使用. 类内部HACK IE6识别 - ...