文本处理工具grep、egrep的具体用法

简介:

一、grep、egrep含义

grep:(global search regular expression(RE)and print out the line);文本搜索工具,根据用户指定的文本模式(PATTERN)对目标文件进行逐行搜索,并显示能够被模式匹配到的行。

egrep:相当于 grep -E ;使用扩展正则表达式来构建模式。



为了更好的阅读和区分其中的元字符和选项,都以红色和加粗标识出来。

在文中截图中的命令egrep没有使用选项加颜色,使用的是临时更改的环境变量:命令:

       export GREP_OPTINOS='--color=auto'

       export GREP_COLOR='01;31'


二、基本用法

1、格式:grep [options] 'PATTERN' file, ...(可以指定多个文件)

wKioL1MEXkzCEwBSAAClliFg1KA033.jpg

--color=auto可以高亮显示匹配到的内容;

wKiom1MESybwa2kdAABK2RgWPRA467.jpg


2、参数

2.1:常用参数

-v反向显示,显示不能被模式所匹配到的行;

wKioL1MES5jj-hfQAACOBoqFEOk777.jpg

-o只显示被模式匹配到的字串,而非整行;

wKioL1MES-7Bw1l0AAApyt7RISQ973.jpg

-i:不区分字符大小写。ignore-case;

wKioL1METNmQsa8ZAAAq04hgU44972.jpg

-E:支持扩展正则表达式;

-A#:显示匹配到的内容及其下面#行;

wKioL1METl-ifsNuAABKvK8Nlrc214.jpg

-B#:显示匹配到的内容及其上面#行;

-C#:显示匹配内容及其上下各#行;

wKiom1METrqRW5TZAAB4LbULIMk809.jpg


2.2:其他参数

-s--no-messages: 不显示错误信息。

-V--version: 显示版本信息。

-w--word-regexp: 只显示全字符合的列。    

-x--line-regexp: 只显示全列符合的列。

-y: 此参数的效果和指定“-i”参数相同。

--help 在线帮助。

同时也可以使用man grep来查看具体的详细参数与说明。


三、正则表达式

1、含义:正则表达式(Regular Expression);正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。

       基本正则表达式和扩展正则表达式:工作于贪婪模式,尽可能长的匹配字符;


2、基本正则表达式元字符


字符匹配:

.:匹配任意单个字符;

wKioL1MET-zDwsJ0AAAhlvydMN8953.jpg

[]:匹配指定范围内的任意单个字符;

范围:

wKioL1MEUFGRjSyMAACIc4v_mx0855.jpg

wKioL1MEUMqTDGcgAAAqH_UV9_Y750.jpg

[^]:匹配指定范围外的任意单个字符;

wKioL1MEU6nT5mWMAAAtpYhxa4Y358.jpg


次数匹配:

*:匹配其前面字符的任意次;0次或多次

wKiom1MEVNjzTtTyAACFqrpFzXA134.jpg

.*:匹配任意长度的任意字符;

wKioL1MEVRvT-AKMAAA_qAlG1e0875.jpg

\?:匹配其前面字符的0次或1次;

wKioL1MEVWbDo0ptAAAzTOzjt3g542.jpg

\{m\}:匹配m次;

wKioL1MEVeSxRmAaAAA3DrfyjuU897.jpg

\{m,n\}:匹配至少m次,至多n次;

wKioL1MEVgvyNuS4AAAqx1Mby-U004.jpg

\{m,\}:匹配至少m次;

wKioL1MEVl6wapyKAAApCT1s6nY155.jpg

\{0,n\}:匹配至多n次;

wKiom1MEVwGDLlnzAAAwFYMTi38680.jpg


位置锚定:

^:锚定行首;

wKioL1MEVxbwbuxZAAArXFy1HdY591.jpg

$:锚定行尾;

wKioL1MEV1OyuuuWAABffvIh_eE184.jpg

\<|\b:锚定词首;

wKioL1MEWNOh7kQXAAAqMDGxaVI993.jpg

\>|\b:锚定词尾;

wKiom1MEWQnBG-6TAAAl7IdBilg978.jpg

^$:为空白行;


分组:

\(\):分组

wKiom1MEkYOSFYJfAABcFQHoRzI580.jpg

\#:#为数字;对分组的字符串基于位置进行引用;

   例:\1;引用前面的第一个左括号以及与之对应的右括号中的模式所匹配的内容。

wKioL1MEkaOSUqs-AABF7jMScvk231.jpg


3、扩展正则表达式元字符:大部分与正则表达式的元字符是相同的,但是\转义符是不需要添加的。

字符匹配:

.:任意单个字符;

[]:指定范围内的任意单个字符;

[^]:指定范围外的任意单个字符;


次数匹配:

*:其前面的字符任意次;

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

+:匹配其前面的字符至少1次;

wKiom1MEWwSgw5XzAAAwM7VZFJo512.jpg

{m}:匹配其前面的字符m次;

{m,n}:至少m次,至多n次;

{m,}:至少m次;

{0,n}:至多n次;


锚定:与基本正则表达式相同;

分组:

():分组;

|:或者;

wKioL1MEW8fzD-zaAABIEzHD6WY651.jpg


四、具体的实例


显示/proc/meminfo中以大小写S开头的行;

wKiom1MEYiuBPqPnAAB9vMHmaLE025.jpg


取出默认shell为非bash的用户;

wKiom1MEZIWQPZanAABSMavvLrU596.jpg


显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;

wKiom1MEZVmBGxbNAAEdr8YjuEA942.jpg


添加用户bash和testbash、basher,而后找出当前系统上其用户名和默认shell相同的用户;

wKiom1MEazmCit-tAACgIHxBBLw523.jpg


写一个匹配规则可以匹配IP地址:1.0.0.1--223.255.255.254

1
egrep  "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-2][0-3])\.([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>"

wKiom1MIO4yBe3HOAAEL68Qph-0088.jpg

wKioL1MIO5zCnjOZAAE4l7Nl0Sk504.jpg


本文转自Mr_陈 51CTO博客,原文链接:http://blog.51cto.com/chenpipi/1360509,如需转载请自行联系原作者

相关文章
|
9月前
|
运维 安全 网络安全
【运维实战分享】轻松搞定 SSL 证书管理,告别证书繁琐操作
Spug证书平台的最大亮点之一就是其极为简化的证书申请流程,无论是新手还是经验丰富的运维专家,都可以在几分钟内轻松完成证书的申请,通过微信扫码直接登录申请,无需复杂注册,整个过程既方便又快捷。
224 17
|
10月前
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
12月前
|
SQL 关系型数据库 MySQL
PHP与MySQL的高效交互:从基础到实践####
本文深入探讨了PHP与MySQL数据库之间的高效交互技术,涵盖了从基础连接到高级查询优化的全过程。不同于传统的摘要概述,这里我们直接以一段精简代码示例作为引子,展示如何在PHP中实现与MySQL的快速连接与简单查询,随后文章将围绕这一核心,逐步展开详细讲解,旨在为读者提供一个从入门到精通的实战指南。 ```php <?php // 数据库配置信息 $servername = "localhost"; $username = "root"; $password = "password"; $dbname = "test_db"; // 创建连接 $conn = new mysqli($se
313 31
|
11月前
|
存储 应用服务中间件 Linux
nginx配置证书和私钥进行SSL通信验证
nginx配置证书和私钥进行SSL通信验证
513 4
|
Prometheus 监控 Cloud Native
介绍如何使用Prometheus进行监控
介绍如何使用Prometheus进行监控
1692 3
|
存储 SpringCloudAlibaba Kubernetes
K8S核心篇:Pod
Pod 是k8s 系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,也是在k8s 上运行容器化应用的资源对象,其他的资源对象都是用来支撑或者扩展Pod 对象功能的,比如控制器对象是用来管控Pod 对象的,Service 或者Ingress 资源对象是用来暴露Pod 引用对象的,PersistentVolume 资源对象是用来为Pod提供存储等等,k8s 不会直接处理容器,而是Pod,Pod 是由一个或多个container 组成。
2733 0
K8S核心篇:Pod
|
Web App开发 缓存 监控
企业级Nginx服务基础到架构优化详解--25条
企业级Nginx服务基础到架构优化详解--25条 1、隐藏nginx header版本号 2、更改源码隐藏软件名称 3、更改nginx默认用户及用户组 4、配置nginx worker进程个数 5、根据CPU核数进行nginx进程优化 6、nginx事件处理模型优化 7、调整Ngin...
1402 0
|
Web App开发 缓存 监控
企业级Nginx服务基础到架构优化详解--25条
企业级Nginx服务基础到架构优化详解--25条 1、隐藏nginx header版本号 2、更改源码隐藏软件名称 3、更改nginx默认用户及用户组 4、配置nginx worker进程个数 5、根据CPU核数进行nginx进程优化 6、nginx事件处理模型优化 7、调整Ngin...
1252 0
|
Linux
linux之grep用法
运用场景:在当前目录下查找,比如代码目录,不需要在.svn目录下,以及ctags生成的tags文件中查找:   grep的--exclude-dir=参数就是为了排除某个目录的,即不包含等号后面的目录;   grep的--exclude=参数是为了排除某个特定的文件的,即不包含等号后面的文件;   grep -nr --exclude="tags" --exclude-dir=".
905 0
|
1天前
|
云安全 人工智能 自然语言处理