grep与正则表达式

http://my.unix-center.net/~Simon_fu/?p=469

     虽然正则表达式经常都在用,但是很少能够静下心来仔细的总结一下。最近看了一个台湾人的网站叫做鸟哥Linux私房菜,关于正则表达式的描述挺详细的。在此,我进行一下总结,如果想仔细的学习正则表达式,请访问鸟哥Linux私房菜,台湾同胞的网站是繁体中文的,需要点儿耐心。

     正则表达式只是字符串的一种描述,只有和支持正则表达式的工具相结合才能进行字符串处理。本文以grep为例来讲解正则表达式。

grep命令

功能:输入文件的每一行中查找字符串。

基本用法:

grep [-acinv] [--color=auto] [-A n] [-B n] '搜寻字符串' 文件名
参数说明:
-a:将二进制文档以文本方式处理
-c:显示匹配次数
-i:忽略大小写差异
-n:在行首显示行号
-A:After的意思,显示匹配字符串后n行的数据
-B:before的意思,显示匹配字符串前n行的数据
-v:显示没有匹配行-A:After的意思,显示匹配部分之后n行-B:before的意思,显示匹配部分之前n行
--color:以特定颜色高亮显示匹配关键字

     –color选项是个非常好的选项,可以让你清楚的明白匹配了那些字符。最好在自己的.bashrc或者.bash_profile文件中加入:

alias grep=grep --color=auto

     每次grep搜索之后,自动高亮匹配效果了。

     ‘搜寻字符串’是正则表达式,注意为了避免shell的元字符对正则表达式的影响,请用单引号(’’)括起来,千万不要用双引号括起来("”)或者不括起来。

     正则表达式分为基本正则表达式和扩展正则表达式。下面分别简单总结一下。

基本正则表达式

     正则表达式学习,主要是对正则表达式元数据的学习。正则表达式本身没有什么高深的东西,本文仅仅对基本正则表达式的元数据进行一下总结:

元数据

意义和范例

^word搜寻以word开头的行。

例如:搜寻以#开头的脚本注释行

grep –n ‘^#’ regular.txt

word$搜寻以word结束的行

例如,搜寻以‘.’结束的行

grep –n ‘.$’ regular.txt

.匹配任意一个字符。

例如:grep –n ‘e.e’ regular.txt

匹配e和e之间有任意一个字符,可以匹配eee,eae,eve,但是不匹配ee。

\转义字符。

例如:搜寻’,’是一个特殊字符,在正则表达式中有特殊含义。必须要先转义。

grep –n ‘\” regular.txt

*前面的字符重复0到多次。

例如匹配gle,gogle,google,gooogle等等

grep –n ‘go*gle’ regular.txt

[list]匹配一系列字符中的一个。

例如:匹配gl,gf。

grep –n ‘g[lf]’ regular.txt

[n1-n2]匹配一个字符范围中的一个字符。

例如:匹配数字字符

grep –n ‘[0-9]’ regular.txt

[^list]匹配字符集以外的字符

例如:grep –n ‘[^o]‘ regular.txt

匹配非o字符

\{n1,n2\}前面的字符重复n1,n2次

例如:匹配google,gooogle。

grep –n ‘go\{2,3\}gle’ regular.txt

\<word单词是的开头。

例如:匹配以g开头的单词

grep –n ‘\<g’ regular.txt

word\>匹配单词结尾

例如:匹配以tion结尾的单词

grep –n ‘tion\>’ regular.txt

扩展正则表达式

     grep一般情况下支持基本正则表达式,可以通过参数-E支持扩展正则表达式,另外grep单独提供了一个扩展命令叫做egrep用来支持扩展正则表达式,这条命令和grep -E等价。虽然一般情况下,基本正则表达式就够用了。特殊情况下,复杂的扩展表达式,可以简化字符串的匹配。

     扩展正则表达式就是在基本正则表达式的基础上,增加了一些元数据。

元数据

意义和范例

+重复前面字符1到多次。

例如:匹配god,good,goood等等字符串。

grep –nE go+d’ regular.txt

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

例如,匹配gd,god

grep –nE ‘go?d’ regular.txt

|或(or)的方式匹配多个字串  
例如:grep –nE ‘god|good’ regular.txt

匹配god或者good。

()匹配整个括号内的字符串,原来都是匹配单个字符

例如:搜寻good或者glad

grep –nE ‘g(oo|la)’ regular.txt

()前面的字符重复0到多次。

例如匹配gle,gogle,google,gooogle等等

grep –nE ‘go*gle’ regular.txt

     Linux下面正则表达式博大精深,上文支持总结了最常用的部分,如果熟练掌握的上面部分的正则表达式基本上可以满足日常使用了。

     另外Linux很多命令支持正则表达式,比如find,sed,awk等等。请在使用的时候参照这些命令的手册使用正则表达式。

参考资料:

鸟哥Linux私房菜

Unix下正则表达式


 

转载于:https://www.cnblogs.com/xuxm2007/archive/2011/06/15/2081671.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c基础--II

c基础&#xff0d;&#xff0d;II 数据输出putchar()函数#include "stdio.h"main(){ char a,b,c; aa; bb; cc; //putchar()函数 putchar(a); putchar(b); putchar(c);}printf()函数printf(格式控制&#xff0c;输出列表)%d 输出 十进制整数%o 输出 八进…

Chuck Cobb谈敏捷组织中PMO的角色

对于设立了PMO&#xff08;项目管理办公室&#xff09;的企业&#xff0c;实施整个企业向敏捷风格的转换可能需要多个部门同步改变工作方式。在敏捷的团队中&#xff0c;PMO的传统角色需要做出改变。Charles G. “Chuck” Cobb,专家级敏捷项目经理、顾问、图书作者,最近分享了对…

为使用mysql而配置codeblocks工程

心结&#xff1a; 为了在codeblocks下创建的C工程中使用mysql&#xff0c;辛辛苦苦忙活了半个下午&#xff0c;终于长舒一口气&#xff0c;搞定了&#xff0c;编译成功。其中不乏数次的成功于失败的反复。个中滋味&#xff0c;只有让我有擂头顿足的冲动。不过&#xff0c;还算…

Java初学者入门经典:面向对象的思维方法(其实同样非常适合C#的初学者)……非原创,作者忘了,非常抱歉...

我是从学习Java编程开始接触OOP(面向对象编程)&#xff0c;刚开始使用Java编写程序的时候感觉很别扭&#xff0c;因为我早以习惯用C来编写程序&#xff0c;很欣赏C的简洁性和高效性&#xff0c;喜欢C简练而表达能力丰富的风格&#xff0c;特别忍受不了Java运行起来慢吞吞的速度…

极客

2019独角兽企业重金招聘Python工程师标准>>> 极客是美国俚语“geek”的音译。随着互联网文化的兴起&#xff0c;这个词含有智力超群和努力的语意&#xff0c;又被用于形容对计算机和网络技术有狂热兴趣并投入大量时间钻研的人。现代的Geek含义虽然与过去有所不同&am…

大数据——SparkStreaming学习笔记

Spark 一、SparkStreaming ​ Spark Streaming 用于流式数据的处理&#xff08;准实时&#xff0c;微序列&#xff09;。Spark Streaming 支持的数据输入源很多&#xff0c;例如&#xff1a;Kafka、 Flume、Twitter、ZeroMQ 和简单的 TCP 套接字等等。数据输入后可以用 Spark…

[推荐]ORACLE SQL:经典查询练手第三篇(不懂装懂,永世饭桶!)

[推荐]ORACLE SQL&#xff1a;经典查询练手第三篇(不懂装懂&#xff0c;永世饭桶&#xff01;) [推荐]ORACLE SQL&#xff1a; 经典查询练手第三篇(不懂装懂&#xff0c;永世饭桶&#xff01;) ——通过知识共享树立个人品牌。 本文与大家共同讨论与分享ORACLE SQL的一些常用经…

ACM试题 - ASCII码排序 - Java中字符与对应ASCII码的转换

Java中字符转换对应ASCII码有两种方式&#xff1a; 第一种&#xff1a; char c a; byte b (byte)c; // b97 第二种&#xff1a; char c a; int b c; // b97 而一个ASCII码转换成相应字符则仅需强制转换&#xff1a; int a 97; char c (char)a; // ca ACM试…

DotNET多线程使用初探

最近几周一直在做DotNET WinForm开发&#xff0c;陆陆续续有些收获&#xff0c;希望能够有空好好整理整理。记下来以免以后又忘了。:-) 一、最简单的线程使用方法 新建一个C# Windows应用程序项目&#xff0c;在最前面的引用代码那增加一行using System.Threading;在界面上扔个…

Linux mount: Structure needs cleaning 错误解决方法

“mount: Structure needs cleaning”报错可以使用xfs_repair来修复&#xff0c;但是要注意 xfs_repair修复的分区中的文件都会丢失&#xff0c;即使是du能正常显示的文件也会丢失。 [rootyw-0-0 /]# mount -a mount: Structure needs cleaning[rootyw-0-0 /]# xfs_repair /dev…

大数据——Spark学习笔记(配置)

Spark运行环境 spark ui web http://hadoop102:8080 历史服务器 http://hadoop102:18080 一. 本地模式(Local)——单机运行 本地模式&#xff1a;运行 bin/spark-shell提交应用&#xff1a;运行 bin/spark-submit --class org.apache.spark.examples.SparkPi …

Linux软件安装——安装软件的命令

Linux软件安装——安装软件的命令 摘要&#xff1a;本文主要学习了如何在Linux系统中安装、更新、卸载软件。 rpm命令 rpm命令用来在Linux系统上进行软件的安装。 基本语法 安装命令&#xff1a; 1 rpm -ivh 包全名 如果没有安装则安装&#xff0c;如果已经安装则升级&#xff…

JavascriptHelp

阅读全文&#xff1a;http://www.cckan.net/forum.php?modviewthread&tid147usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.Web…

GoLang之方法与接口

GoLang之方法与接口 Go语言没有沿袭传统面向对象编程中的诸多概念&#xff0c;比如继承、虚函数、构造函数和析构函数、隐藏的this指针等。 方法 Go 语言中同时有函数和方法。方法就是一个包含了接受者&#xff08;receiver&#xff09;的函数&#xff0c;receiver可以是内置类…

孙继海化装

于输得太惨&#xff0c;中国球员怕回国被球迷打&#xff0c;孙继海决定化装成“乞丐”。化好之后遇到一个老太太&#xff0c;他想看看自己化装的效果&#xff0c;就给了老太太100块钱&#xff0c;问&#xff1a;“你知道我是谁吗&#xff1f;”老太太看了看说&#xff1a;“你是…

sql 时间函数

1. 当前系统日期、时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基础上&#xff0c;返回新的 datetime 值 例如&#xff1a;向日期加上2天 select dateadd(day,2,’2004-10-15′) –返回&#xff1a;2004-10-17 00:00:00.000 3. datediff 返回跨两个指定日期的…

大数据——Hive学习笔记

具体代码可以参考&#xff1a; https://github.com/Ostrich5yw/java4BigData

Eclipse 常用快捷键

Eclipse 常用快捷键 快捷键 描述 编辑 Ctrl1 快速修复&#xff08;最经典的快捷键,就不用多说了&#xff0c;可以解决很多问题&#xff0c;比如import类、try catch包围等&#xff09; CtrlShiftF 格式化当前代码 CtrlShiftM 添加类的import导入 CtrlShiftO 组织类的…

[Story]狗尾草花园

不知道为什么&#xff0c;很多年过去&#xff0c;我却依然记得这个故事。很小的时候&#xff0c;大概四、五岁吧&#xff0c;在河滩上和几个姐姐&#xff0c;一起玩过家家。他们大概十三&#xff0c;四岁吧&#xff0c;反正比我大好多。分成两组&#xff0c;我在我们一组当然是…