grep:打印匹配给定模式的行

grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来);是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局搜索正则表达式并打印,它的使用权限是所有用户。


格式:

grep [OPTIONS] PATTERN [FILE...]

常用选项:

--color=auto:一般先定义个别名(alias grep="grep --color=auto")

-v: 反向选取;--invert-match 改变匹配的意义,只选择不匹配的行。

-o: -only-matching,仅显示匹配的行中与 PATTERN 相匹配的部分,而非字串所在的行。

-i: ignore-case,忽略字符大小写

-E: --extended-regexp,支持使用扩展正则表达式,(将模式 PATTERN 作为一个扩展的正则表达式来解释 ),等同于egrep。

-c:计算“查找字符串”的次数。

-A # :after,显示匹配的行之后的下文N行

-B # :before,显示匹配的行之前的上文N行

-C # :context,显示匹配的行的上下和下文各N行

各选项简单示例 :

image


正则表达式

定义:

正则表达式(Regular Expression)就是处理字符串的方法,它是以“行”为单位来进行字符串的处理行为,正则表达式通过一些特殊字符的辅助,可以让用户轻易达到查找、替换、删除一行或多行文字字符串。

组成:

一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

元字符(Meta-Characters)是正则表达式中具有特殊意义的专用字符,用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。


应用:

正则表达式并不是一个工具程序,而是一种字符串处理的标准依据,如果你想要以正则表达式的方式处理字符串,就得要使用支持正则表达式的工具程序才行,这类的工具程序很多,如vi,grep,sed,awk等工具。

正则表达式与通配符区别

通配符一般只用于文件名匹配,它是由shell解析的;正则表达式是用来匹配字符串的,般用在工具软件(grep、awk、sed等)或者支持正则的语言(javascript、perl、java、c++等)进行字符串处理时,它是有使用它的工具软件或者是语言的库模块来解释。


egrep正则表达式元字符:


个字符的元字符:
.: 匹配任意单个字符
[]: 字符组,匹配单个列出的字符定义一个字符集合,匹配该集合中的一个字符
[^]: 排除型字符组,匹配单个未列出的字符;对字符集合求非(是对整个集合求非,而不是紧挨着^符号的字符)

在字符集合中定义一个区间。如[A-Za-z]
\char
转义字符 若char是元字符,或转义序列无特殊含义时,匹配char对应的普通字符

数量元字符:用于实现指定其前面的字符所能够出现的次数


*: 匹配其前面的字符可以出现零次或多次
?: 0次或1次,它前面的字符是可有可无的
{m}: m次,它前的字符要出现m次
{m,n}: 至少m次,至多n次
{m,}:至少m次
{0,n}: 至多n次
+ :加号,至少需要匹配一次,至多可能任意多次

.*:任意长度的任意字符;工作于贪婪模式:尽可能多的去匹配

位置锚定元字符:
^: 行首锚定;脱字符

$: 行尾锚定:
^$: 空白行 不包含特殊字符的连续字符组成的串叫单词:

\<: 单词分界符,单词开头,等同\b,出现于单词左侧

\>: 单词分界符,单词结尾,等同\b
\b:单词边界(单词的开头和结束)


分组:
( ) 分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用

引用:
\#: 引用第n个括号所匹配到的内容,而非模式本身


或者:

a|b: a或者b

shell转义符

有时候,我们想让 通配符,或者元字符 变成普通字符,不需要使用它。那么这里我们就需要用到转义符了。 shell提供转义符有三种。

字符

说明

‘’(单引号)

又叫硬转义,其内部所有的shell 元字符、通配符都会被关掉。注意,硬转义中不允许出现’(单引号)。

“”(双引号)

又叫软转义,其内部只允许出现特定的shell 元字符:$用于参数代换 `用于命令代替

\(反斜杠)

又叫转义,去除其后紧跟的元字符或通配符的特殊意义。

实例:

$ ls \*.txt

ls: 无法访问 *.txt: 没有那个文件或目录

$ ls '*.txt'

ls: 无法访问 *.txt: 没有那个文件或目录

$ ls 'a.txt'

a.txt

$ ls *.txt

a.txt b.txt


可以看到,加入了转义符 “*”已经失去了通配符意义了。


表达式全集:

正则表达式全集


shell解析脚本的过程

大家可能会想特殊字符,通配符,那么 shell在得到一条命令,到达是怎么样处理的呢?我们看下下面的图:

clip_image014

如果用双引号包括起来,shell检测跳过了1-4步和9-10步,单引号包括起来,shell检测就会跳过了1-10步。也就是说,双引号 只经过参数扩展、命令代换和算术代换就可以送入执行步骤,而单引号转义符直接会被送入执行步骤。而且,无论是双引号转义符还是单引号转义符在执行的时候能够告诉各个命令自身内部是一体的,但是其本身在执行时是并不是命令中文本的一部分。

grep、egrep与正则表达式常用用法总结的更多相关文章

  1. Html5 canvas实现粒子时钟的示例代码

    这篇文章主要介绍了Html5 canvas实现粒子时钟的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. ios – 使用大写符号在字符串swift中获取URL的正则表达式

    我尝试在文本中获取URL.所以,在此之前,我使用了这样一个表达式:但是当用户输入带有大写符号的URL时(例如Http://Google.com,它与它不匹配)我遇到了问题.我试过了:但什么都没发生.解决方法您可以使用正则表达式中的i内联标志关闭区分大小写,有关可用正则表达式功能的详细信息,请参阅FoundationFrameworkReference.(?ismwx-ismwx)Flagsetti

  4. 在Xcode4中,你可以更改用于显示隐形字符的字符吗?

    我更喜欢VisualStudio显示隐形的方式……

  5. ios – NSURLErrorDomain代码-1002下载pdf

    我正在尝试缓存一个网页,然后我可以使用UIWebView显示该网页.我在另一个NSURLSessionDataTask的完成块内的for循环(尝试缓存6个网页)中有相关的NSURLSessionDataTask.当我跑步时,我不断收到此错误:Ayy下载错误,数据:响应:(空)错误:错误域=NSURLErrorDomain代码=-1002“操作无法完成.(NSURLErrorDomain错误-1

  6. ios – 应用程序商店描述特殊字符

    是不是可以在AppStore描述中使用像星星这样的特殊字符了?我得到这个错误:描述不得包含标记语言.说明不得包含以下字符:★提前致谢:)解决方法仍然允许一些unicode字符.以下字符已经过测试并仍然有效:◆√至于现在他们工作正常,但苹果可以随时再次改变条件.

  7. ios – 将数组中的字符转换为整数

    即使我搜索了文档,我似乎无法弄清楚如何做到这一点.我试图弄清楚如何将数组中索引处的字符转换为整数.例如,假设我有一个名为“容器”的字符数组,我无法弄清楚该怎么做:谢谢您的帮助!解决方法Swift并不容易在原始和类型表示之间进行转换.这是一个在此期间应该有所帮助的扩展:这使您可以非常接近您想要的:对于遇到此问题的任何工程师,请参阅rdar://17494834

  8. 为什么PATH不适用于从Xcode执行的自定义shell脚本?

    我观察到Xcode在运行脚本阶段执行的自定义shell脚本没有设置任何环境变量.他们有很多其他变量,但不是PATH.有可能解决这个问题,怎么样?我只想运行一个应该在路径中的工具,我不想开始手动检查可能的位置.解决方法你可以明确地找到用户.bashrc,.profile等.或者更好的是,运行类似的东西这不会有污染其他变量的风险.

  9. ios – Xcode Server 4.0 git从构建触发脚本推送

    我为一个托管在github上的项目安装了一个XcodeBot.我按照步骤和设置机器人来使用我现有的SSH密钥.验证成功,项目结算和建立.然后,我在预触发器操作中添加了一个shell脚本,它增加了plist中的版本,将其标记,并将该更改提交到github.但是当我尝试从shell脚本执行gitpush时,我得到:–推送到git@github.com:spex-app/spex-ios.git权限被拒

  10. ios – 如何在Swift 3中使用正则表达式?

    解决方法我相信.当没有其他选项适用时,将使用.allZeros.因此,使用Swift3,您可以传递一个空的选项列表或省略options参数,因为它默认为无选项:要么请注意,在Swift3中,您不再使用error参数.它现在抛出.

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部