Linux 系统中用于在文件内查找指定的字符串的命令 -- grep/egrep/fgrep 的区别详解

文章目录

  • 一、命令介绍
    • grep
    • egrep
    • fgrep
  • 二、正则表达式元字符扩展集
  • 三、POSIX 字符集

一、命令介绍

grep

一种强大的文本搜索工具,用于在文件内查找指定的字符串,在不使用转义符的前提下支持基本的正则表达式来搜索文本,并把匹配的行打印出来。

Linux 使用 GNU 版本的 grep。它可以通过 -G-E-F 等选项来使用 egrepfgrep 的功能。

grep 的工作方式是这样的,它在一个或多个文件中搜索模板(pattern)。如果模板包括空格,则必须使用双引号将其包裹起来,模板后的所有字符串被看作文件名。

grep 可用于 shell 脚本,因为 grep 通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回 0,如果搜索不成功,则返回 1,如果搜索的文件不存在,则返回 2。我们利用这些返回值就可进行一些自动化的文本处理工作。

egrep

egrep,称为扩展的 grep 命令,其实和 grep -E 等价,支持基本和扩展的正则表达式,使用的语法及参数可参照 grep 指令,与 grep 的不同点在于解读字符串的方法。egrep 是用 extended regular expression 语法来解读的,而 grep 则用 basic regular expression 语法解读,extended regular expressionbasic regular expression 的表达更规范。

fgrep

fgrep 就是 fixed grepfast grep,等同于 grep -F。它把所有的字符都看作普通字符,也就是说,正则表达式中的元字符全部按字符原义解释。

fgrep 命令搜索字符串而不是搜索匹配表达式的模式。它利用固定的字符串来对文本进行搜索,但不支持正则表达式的引用,所以此命令的执行速度也最快。

二、正则表达式元字符扩展集

在扩展的正则表达中把写成 \(\) 写成 ()\{ \} 写成 {},加入了 + 限定符,表示匹配其前面的元素至少出现一次,无上限;加入了 ? 限定符,表示匹配其前面的元素 0 个或者 1 个;新增了或符号 |,表示或者的意思。基本正则表达式使用 (){}+?| 都需要加 \ 进行转义,在扩展正则表达中不需要。

扩展的元字符解释
+匹配一个或多个前面的元素。如:[a-z]+able,表示匹配一个或多个小写字母后跟着 able 的串,如 loveableenabledisableaable 等。在 greppattern 中需要转义,写成 \+
?匹配零个或 1 个前面的元素。如:gr?p,表示匹配 gp 或者 grp,即字符 r 可有可无
|代表或者的意思。如:a|b|c 表示匹配 abc;如:grep|sed 表示匹配 grepsed。在 grep 中需要转义,写成 \|,或者通过选项 -E 来实现,如:grep -E 'c|cat' filename,表示在文件 filename 内查找 c 或者 cat,而 egrep 直接写成:egrep 'c|cat' filename
()分组符号,如:love(able|rs),表示匹配 loveablelovers;如:(ov)+,表示匹配一个或多个 ov,即匹配至少一个 ov。在 grep 中需要使用转义符,写成 \(\)
{m,n}匹配其前面的元素 mn 次 。在 grep 中直接使用区间量词,需要转义,写成:\{m,n\}

三、POSIX 字符集

为了在不同国家的字符编码中保持一致,POSIX(The Portable Operating System Interface) 增加了特殊的字符类,如 [:alnum:]A-Za-z0-9 的另一个写法。要把它们放到 [] 号内才能成为正则表达式,如:[A- Za-z0-9] 等价于 [[:alnum:]]。除了 fgrepgrepegrep 都支持 POSIX 字符集。

字符表达式说明
[[:alnum:]]文字数字字符
[[:alpha:]]文字字符
[[:digit:]]数字字符
[[:graph:]]非空字符(非空格,控制字符)
[[:lower:]]小写字符
[[:cntrl:]]控制字符
[[:print:]]非空字符(包括空格)
[[:punct:]]标点符号
[[:space:]]所有空白字符(新行,空格,制表符)
[[:upper:]]大写字符
[[:xdigit:]]十六制数字(0-9,a-f,A-F)

注:如果在英语系的国家中,上述的文字字符就是指英文字母。另外POSIX 字符集可以参考《正则表达式详解》中的 POSIX 字符集章节。

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

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

相关文章

rest api封装调用_如何从云功能调用外部REST API

rest api封装调用在之前的博客文章中,我展示了如何创建您的第一个云功能 (以及一个视频 )。 您的云函数很可能需要调用外部REST API。 以下教程将向您展示如何创建此类功能(非常简单)。 登录到IBM Cloud帐户 点击目录…

SVN 版本控制的数据合并规则

文章目录自己的猜想文件名比对文本行比对事实是什么提交计划提交数据更新客户端版本库数据时,同名文件中文本行的数据比对规则自己的猜想 假设SVN服务端就存在一份最新版的文件 HF,客户端检出这份文件后再提交,当前用户提交的文件称为 NF。 …

java算术运算符的分类_6.Java算术运算符

1.算术运算符的分类:算术运算符:* :( 正数,加法 ,连接符)* 连接符: 如果数据和字符串连接一起就是用了"",那么""就成了连接符,拼接字符串* 任何数据与字符串使用连接符那么结果的数据类型都是字符串类型* 任何数据和数据相加就是做加法…

java项目教训_[免费电子书]分析超过600,000个Java项目的经验教训

java项目教训建立明智的错误处理工作流程需要什么? 调查和解决生产中的应用程序错误对于维持性能和可靠性至关重要。 但是,这并不意味着要花很多时间。 要理解为什么在生产中的故障排除,可这样的头痛,我们开始发现“真理”我们经…

MacOS 的软件包管理工具 MacPorts

MacPorts 就像 Homebrew 一样,可以管理 MacOS 的软件包,和 Linux 系统下的 apt-get、yum 一样。 官方网址:https://www.macports.org/index.php

java plus方法_Java.math.BigDecimal.plus()方法实例

全屏Java.math.BigDecimal.plus()方法实例java.math.BigDecimal.plus() 返回一个BigDecimal,其值是 (this),并且其刻度为是 this.scale().这种方法,它只是返回此BigDecimal是包括对称性与一元减号方法negate()。声明以下是java.math.BigDecim…

java jdk设置字符集_使用JDK 11在Java字符串上的新方法

java jdk设置字符集Java的String类似乎将在JDK 11中获得一些新方法,该方法将于2018年9月发布。 错误号 错误标题 新的String方法 描述 JDK-8200425 字符串::行 lines() “使用专用的分隔符从源字符串中懒散地提供行的字符串实例方法。” JDK-8200378 Stri…

MacOS 如何安装 SVN 命令终端

I purchased a new Mac running Mac OS X v10.8.5 (Mountain Lion). I’ve seen it written in various places that SVN is installed on OS X by default, but when I open a terminal and type which svn the program is not found. I’ve also run find / -name svn to che…

java代码审计ssrf危险函数_某租车系统Java代码审计之后台注入漏洞分析

CMS简介系统基于租车业务场景而搭建的O2O服务平台,可为用户提供商务租车、接送机、旅游租车、企业租车、自驾租车、婚庆用车等自助租车服务。系统包含车辆库管理、门店管理、员工管理、司机管理、订单管理、活动管理、评价管理、财务管理、统计等。部署简介1、下载代…

docker jib_Jib –为Spring Boot应用程序构建docker映像

docker jib使用Jib为示例Spring Boot应用程序创建docker映像是如此容易,这让我感到惊喜。 让我首先将Jib与以前使用的方法进行对比。 我正在使用bmuschko出色的gradle-docker插件创建docker映像。 如果可以访问docker守护进程以及基于dockerfile或直接Dockerfile的…

如何在 MacOS 环境下搭建 SVN 服务端环境

文章目录在服务端创建资源仓库资源仓库访问权限配置给资源仓库添加用户配置用户组及用户的权限启动 SVN 服务器停止 SVN 服务器SVN 是一个使用十分广泛的开放源代码的版本控制系统。在 Windows 系统下,我们一般使用 TortoiseSVN 来搭建 SVN 环境。而 MacOS 系统我们…

java 飞行记录器_Java 11功能– Java飞行记录器

java 飞行记录器在本文中,我们将看到如何利用Java Flight Recorder功能作为Java 11的一部分。之前,它是商业功能之一。 但是,对于带有JEP 328的 Java 11,它是开源的。 Java Flight Recorder将OS和JVM事件记录到一个文件中&#xf…

mysql管理节点_MySql节点管理安装步骤需要在SerA和SerB上各做一次

对大家推荐很好使用的MySql节点系统,像让大家对MySql节点系统有所了解,然后对MySql节点系统全面讲解介绍,希望对大家有用在向大家详细介绍MySql节点之前,首先让大家了解下MySql节点,然后全面介绍MySql节点,…

在java中补零的作用是什么_浅谈Java中的补零扩展和补符号位扩展

今天,魏屌出了一道题,题目如下:定义一个大头序的byte[]a{-1,-2,-3,-4},转换成short[]b.问b[0]和b[1]分别是多少?乍一看,这题不难,无非就是移位操作,再进行组合。但是呢?对…

arquillian_使用Arquillian(远程)测试OpenLiberty

arquillian听到许多好评后,我想我会尝试一下Open Liberty 。 在这篇文章中,我将讨论以下内容: 开放自由的设置 设置JDBC连接 设置Arquillian 测试REST端点 安装开放自由 在撰写本文时,我正在使用Open Liberty 18.0.0.1&…

Linux 命令之 pico -- 文本编辑器

没有时间整理,暂时参加此文:https://tool.lu/command/detail.html?namepico

delphi 获取java控件位置_delphi的IdFTP控件函数怎么调用

RootDir 要删除的根目录,一般情况下 RemoteDir 与 RootDir 相等}procedure TForm1.FTP_DeleteAllFiles(var idFTP : TIdFtp;RemoteDir,RootDir : string);label Files;vari,DirCount : integer;Temp : string;beginidFTP.ChangeDir(RemoteDir);if Pos(RootDir,idFT…

javafx查找子节点_JavaFX技巧29:使布局忽略不可见的节点

javafx查找子节点在我仍在Swing中实现UI的时候,我曾经是MigLayout的忠实拥护者(“一个布局管理者来统治所有这些,对吗Mikael?”)。 我真正喜欢的功能之一是当组件不可见时可以定义不同的行为。 MigLayout允许我保留现在…

SVN 仓库转换为 Git 仓库

没有时间整理,请暂时参考:http://www.178linux.com/21199

现在java编程用的框架_现在java编程用的框架

2怎样学习java掌握常用的API用法每一门成熟的编程语言都会向用户提供丰富的应用编程接口(Application programming Interface),也就是通常所说的API,熟练掌握这些API,无疑会极大的提高我们编码的效率,但是Java提供的API实在是太多…