Linux Shell 脚本编程学习之【第3章 正则表达式 (第二部分) grep命令】
第3章 正则表达式 (第二部分)
- 4 grep命令
- 4.1 基本用法
- 4.2 参考命令
- 4.2.1 双引号
- 4.2.2 -c 输出匹配行数
- 4.2.3 -h 或 -l 不显示或只显示文件名
- 4.2.4 -s 不显示错误信息
- 4.2.5 -r 递归显示本级目录及下级目录
- 4.2.6 -w 匹配完整词 -x 匹配完整行
- 4.2.7 -q 退出状态
- 4.2.8 -b 距文件头部的偏移量
- 4.2.9 -E -F
- 4.3 grep与正则表达式
- 4.3.1 匹配行首
- 4.3.2 查找空白行(^)
- 4.3.3 设置大小写(-n)
- 4.3.4 转义符(\)
- 4.3.5 POSIX字符
- 4.3.6 精确匹配
- 4.3.7 或字符
- 4.4 grep 命令族简介
4 grep命令
1、文本搜索工具
2、GREP 是Global search Regular Expression and Print out the line的简称,即全面搜索正则表达式并把行打印出来。
3、grep命令的模式十分灵活,可以是字符串,也可以是变量,还可以是正则表达式。模式中包含空格,则必须用双引号括起来。
4.1 基本用法
| 选 项 | 意 义 |
|---|---|
| -c | 只输出匹配行的数量 |
| -i | 搜索时忽略大小写 |
| -h | 查询多文件时不显示文件名 |
| -I | 只列出符合匹配的文件名,而不列出具体的匹配行 |
| -n | 列出所有的匹配行,并显示行号 |
| -s | 不显示不存在或无匹配文本的错误信息 |
| -v | 显示不包含匹配文本的所有行 |
| -w | 匹配整词 |
| -x | 匹配整行 |
| -r | 递归搜索,不仅搜索当前工作目录,而且搜索子目录 |
| -q | 禁止输出任何结果,以退出状态表示搜索是否成功 |
| -b | 打印匹配行距文件头部的偏移量,以字节为单位 |
| -0 | 与-b选项结合使用,打印匹配的词距文件头部的偏移量,以字节为单位 |
| -E | 支持扩展的正则表达式 |
| -F | 不支持正则表达式,按照字符串的字面意思进行匹配 |
4.2 参考命令
命令模式指的是将命令封装成一个整体。
4.2.1 双引号
// 含空格时使用双引号
[rhel@localhost ~]$ grep -i "user for" /etc/passwd
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
geoclue:x:994:991:User for geoclue:/var/lib/geoclue:/sbin/nologin
4.2.2 -c 输出匹配行数
// -c输出匹配的行数[rhel@localhost ~]$ grep -c -i "user for" /etc/passwd
3// -n 列出匹配项并加上行号。
[rhel@localhost ~]$ grep -n -i "user for" /etc/passwd
16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
19:colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
27:geoclue:x:994:991:User for geoclue:/var/lib/geoclue:/sbin/nologin
4.2.3 -h 或 -l 不显示或只显示文件名
// -h 显示文件名 -l 只列出符合规范的文件名
[rhel@localhost etc]$ grep -i home passwd*
passwd:rhel:x:1000:1000:rhel:/home/rhel:/bin/bash
passwd:db2inst1:x:1001:901::/home/db2inst1:/bin/bash
passwd:db2fenc1:x:1002:902::/home/db2fenc1:/bin/bash
passwd:db2as:x:1003:903::/home/db2as:/bin/bash
passwd-:rhel:x:1000:1000:rhel:/home/rhel:/bin/bash
passwd-:db2inst1:x:1001:901::/home/db2inst1:/bin/bash
passwd-:db2fenc1:x:1002:902::/home/db2fenc1:/bin/bash
[rhel@localhost etc]$ grep -h home passwd*
rhel:x:1000:1000:rhel:/home/rhel:/bin/bash
db2inst1:x:1001:901::/home/db2inst1:/bin/bash
db2fenc1:x:1002:902::/home/db2fenc1:/bin/bash
db2as:x:1003:903::/home/db2as:/bin/bash
rhel:x:1000:1000:rhel:/home/rhel:/bin/bash
db2inst1:x:1001:901::/home/db2inst1:/bin/bash
db2fenc1:x:1002:902::/home/db2fenc1:/bin/bash
[rhel@localhost etc]$ grep -l home passwd*
passwd
passwd-
4.2.4 -s 不显示错误信息
[rhel@localhost etc]$ grep user else passwd
grep: else: 没有那个文件或目录
passwd:saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
passwd:radvd:x:75:75:radvd user:/:/sbin/nologin
passwd:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
passwd:usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
passwd:qemu:x:107:107:qemu user:/:/sbin/nologin
passwd:rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin[rhel@localhost etc]$ grep -s user else passwd
passwd:saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
passwd:radvd:x:75:75:radvd user:/:/sbin/nologin
passwd:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
passwd:usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
passwd:qemu:x:107:107:qemu user:/:/sbin/nologin
passwd:rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
4.2.5 -r 递归显示本级目录及下级目录
[root@localhost etc]# grep auth pa*
grep: pam.d: 是一个目录
passwd:saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
passwd-:saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
[root@localhost etc]# grep -s auth pa*
passwd:saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
passwd-:saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
[root@localhost etc]# grep -r auth pa*
pam.d/config-util:auth sufficient pam_rootok.so
pam.d/config-util:auth sufficient pam_timestamp.so
pam.d/config-util:auth include system-auth
pam.d/config-util:session optional pam_xauth.so
4.2.6 -w 匹配完整词 -x 匹配完整行
[root@localhost etc]# grep tcpd* passwd
tcpdump:x:72:72::/:/sbin/nologin
[root@localhost etc]# grep -w tcpd* passwd
[root@localhost etc]#
[root@localhost etc]# grep tcpd* passwd
tcpdump:x:72:72::/:/sbin/nologin[root@localhost etc]# grep -x tcpdump passwd
[root@localhost etc]# grep -x tcpdump:x:72:72::/:/sbin/nologin passwd
tcpdump:x:72:72::/:/sbin/nologin
4.2.7 -q 退出状态
grep命令后一旦加上-q选项, grep将不再输出任何结果,而是以退出状态表示搜索是否成功,退出状态0表示搜索成功,退出状态1表示未搜索到满足模式的文本行,退出状态2表示命令或程序由于错误而未能执行。
[root@localhost etc]# grep -q -x tcpdump:x:72:72::/:/sbin/nologin passwd
[root@localhost etc]# echo $?
0 --退出状态0
[root@localhost etc]# grep -q -x tcpdump passwd
[root@localhost etc]# echo $?
1 --退出状态1
[root@localhost etc]# grep -q -s -x tcpdump passwdmmm
[root@localhost etc]# echo $?
2 --退出状态2
4.2.8 -b 距文件头部的偏移量
grep-b 选项打印匹配行距文件头部的偏移量,以字节为单位。
如果在-b 选项后再加上-o 选项 ,grep命令将打印匹配的词距文件头部的偏移量。
[root@localhost etc]# grep -b bash passwd
0:root:x:0:0:root:/root:/bin/bash
2016:rhel:x:1000:1000:rhel:/home/rhel:/bin/bash
2059:db2inst1:x:1001:901::/home/db2inst1:/bin/bash
2105:db2fenc1:x:1002:902::/home/db2fenc1:/bin/bash
2151:db2as:x:1003:903::/home/db2as:/bin/bash
[root@localhost etc]# grep -b -o bash passwd
27:bash
2054:bash
2100:bash
2146:bash
2186:bash
[root@localhost etc]#
4.2.9 -E -F
grep命令的-E 和-F 选项分别等价于grep命令族中的egrep和 fgrep命令
4.3 grep与正则表达式
4.3.1 匹配行首
// 匹配以n开头的行首
[root@localhost etc]# grep ^n passwd
nobody:x:99:99:Nobody:/:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
[root@localhost etc]#
4.3.2 查找空白行(^)
// 统计空白行的数量
[root@localhost etc]# grep -c ^$ profile
11// 统计非空白行行数
[root@localhost etc]# grep -c ^[^$] profile
65
4.3.3 设置大小写(-n)
[root@localhost etc]# grep -i RHEL passwd
rhel:x:1000:1000:rhel:/home/rhel:/bin/bash
[root@localhost etc]# grep -n [Rr]hel passwd
40:rhel:x:1000:1000:rhel:/home/rhel:/bin/bash
4.3.4 转义符(\)
[root@localhost etc]# grep cj\.name makedumpfile.conf.sample
## erase cj.name[root@localhost rhel]# grep '\-\{5\}' 1.sh
-----dddfsdf
-----sdfsdfasdfaew
4.3.5 POSIX字符
为了保持不同国家的字符编码的一致性, POSIX(Portable Operating System Interface)增 加了特殊的字符类,以[:classname]的格式给出, grep 命令支持POSIX 字符类
| 类 名 | 意 义 |
|---|---|
| [:upper:] | 表示大写字母[A~Z] |
| [:lower:] | 表示小写字母[a~z] |
| [:digit:] | 表示阿拉伯数字[0~9] |
| [:alnum:] | 表示大小写字母和阿拉伯数字[0~9a~zA~Z] |
| [:space:] | 表示空格或Tab键 |
| [:alpha:] | 表示大小写字母[a~zA~Z] |
| [:cntrl:] | 表示Ctrl键 |
| [:graph:]或[:print:] | 表示ASCIⅡI码33~126之间的字符 |
| [:xdigit:] | 表示16进制数字[0~9 A~Fa~f] |
//利用POSIX 字符类搜索以大写字母开头的行
[root@zawu globus]# grep ^[[:upper:]] 00.pem
This is a Certificate Request file:
It should be mailed to xd nidseu edu cn
Certificate Subject: _ . .
The above string is known as your user certificate subject, and it To install this user certificate, please save this e-mail message If you have any questions about the certificate contactMIIB4ZCCAUwCAQAwcTENMAsGA1UEChMER3JpZDETMBEGA1UECxMKR2xvYnVzVGCxMKc2V1LmVkdS5jbjEPMAOGA1UEAxMGZ2XvYnVZMIGfMAOGCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCw50H88r7sAGjQGLZTmMxTiw9AgDqppBMhP6Fg3eJTqBvqBdhaYTRtleSBT/AJUi3rTDRIABJPgu8cZkwb1AE8uEJSeCKwgk3J9QHK2NcZXwIDAQABBAIWADANBgkqhkiG9wOBAQQFAAOBgQBoHRUaaB/Tyu+LuALwnT3Muw/OjDIYxc5aYaA4dwCB6/2yVYyfmyRCNox3rIsyUvqL9p81d/hpNiAB/0OazMBialq5Gcpaansd
[rootezawu globus]#//搜索以空格开头文本行
[rootazawu globus]# grep ^[[:space:]] 00.pem
/0=Grid/OU=GlobusTest/OU=simpleCA-seugrid1 .seu .edu .cn/OU=seu .edu .cn/CN=globus
You need not edit this message in any way . Simply
save this e-mail message to the file.
4.3.6 精确匹配
[root@localhost rhel]# grep the 1.sh
Linel:there are four lines in this file
Line2:this the line 2
Line3:this is another line
[root@localhost rhel]# grep "\<the\>" 1.sh
Line2:this the line 2[root@localhost rhel]# grep -w the 1.sh
Line2:this the line 2
4.3.7 或字符
字符“ | ”是扩展的正则表达式中定义的, grep需要加上-E 选项才能支持它,下面给出grep命令使用“ | ”字符的例子。
[root@localhost rhel]# grep -E "there | another " 1.sh
Linel:there are four lines in this file
Line3:this is another line
4.4 grep 命令族简介
Linux 系统支持三种形式的grep命令,通常将这三种形式的 grep命令称为 grep命令族, 这三种形式具体为:
● grep: 标准grep 命令,支持基本正则表达式,上面两小节已经对此命令进行了详细 的讨论。
● egrep: 扩展grep 命令,支持基本和扩展正则表达式。
● fgrep: 快速grep 命令,不支持正则表达式,按照字符串的字面意思进行匹配。
egrep 命令与 grep -E 等价, fgrep 命令与 grep -F 等价,在某些Linux 发行版中, egrep 和fgrep都是grep命令的别名,分别将其符号链接到grep-E 和 grep-F 命令。
[root@localhost rhel]# egrep "there | another " 1.sh
Linel:there are four lines in this file
Line3:this is another line
[root@localhost rhel]# fgrep another 1.sh
Line3:this is another line
相关文章:
Linux Shell 脚本编程学习之【第3章 正则表达式 (第二部分) grep命令】
第3章 正则表达式 (第二部分) 4 grep命令4.1 基本用法4.2 参考命令4.2.1 双引号4.2.2 -c 输出匹配行数4.2.3 -h 或 -l 不显示或只显示文件名4.2.4 -s 不显示错误信息4.2.5 -r 递归显示本级目录及下级目录4.2.6 -w 匹配完整词 -x 匹配完整行4.2.7 -q 退出…...
大语言模型LLM
目录 一、语言模型的发展 语言模型(Language Model,LM)目标是建模自然语言的概率分布,具体目标是构建词序列w1,w2,...,wm的概率分布,即计算给定的词序列作为一个句子出现可能的大小P(w1w2...wm)。但联合概率P的参数量…...
自学网络安全(黑客)的误区
前言 网络安全入门到底是先学编程还是先学计算机基础?这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常重要。 一、网络安全学习的误区 1.不要…...
@Conditional
Conditional Conditional 是 spring framework 中提供的一个条件注解,,满足条件就注入,不满足就不注入ioc Condtional 需要和 Condition接口 一起用: 返回true注入,返回false不注入,, 里面有一…...
【Linux】网络基础之TCP协议
目录 🌈前言🌸1、基本概念🌺2、TCP协议报文结构🍨2.1、源端口号和目的端口号🍩2.2、4位首部长度🍪2.3、32位序号和确认序号(重点)🍫2.4、16位窗口大小🍬2.5、…...
Java设计模式之装饰器(Decorator)模式
装饰器(Decorator)设计模式允许动态地将新功能添加到对象中,同时又不改变其结构。 什么是装饰器模式 装饰器(Decorator)模式通过将对象进行包装,以扩展其功能,而不需要修改其原始类。装饰器模…...
element ui树组件render-content 树节点的内容区的渲染另一种方式
直接上代码吧,不用h的写法。 <el-tree :data"data" node-key"id" default-expand-all :expand-on-click-node"false" :props"defaultProps":render-content"renderContentTree" node-click"handleNodeClick"&g…...
html a标签换行显示
文章目录 用css display属性不用css,可以用<br>标签换行示例 用css display属性 可以使用CSS的display属性来实现多个a标签每行显示一个。 HTML代码: <div class"link-container"><a href"#">Link 1</a>…...
关于Redis-存Long取Integer类型转换错误的问题
背景 最近遇到了两个Redis相关的问题,趁着清明假期,梳理整理。 1.存入Long类型对象,在代码中使用Long类型接收,结果报类型转换错误。 2.String对象的反序列化问题,直接在Redis服务器上新增一个key-value,…...
设计模式一:简单工厂模式(Simple Factory Pattern)
简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它提供了一个通用的接口来创建各种不同类型的对象,而无需直接暴露对象的创建逻辑给客户端。 简单工厂的三个重要角色: 工厂类(Factory Class&…...
如何利用plotly和geopandas根据美国邮政编码(Zip-Code)绘制美国地图
对于我自己来说,该需求源自于分析Movielens-1m数据集的用户数据: UserID::Gender::Age::Occupation::Zip-code 1::F::1::10::48067 2::M::56::16::70072 3::M::25::15::55117 4::M::45::7::02460 5::M::25::20::55455 6::F::50::9::55117我希望根据Zip-…...
ceph集群搭建
文章目录 理论知识具体操作搭建ceph本地源yum源及ceph的安装配置NTP(解决时间同步问题)部署ceph自定义crush 理论知识 Ceph是一个分布式存储系统,并且提供了文件、对象、块存储功能。 Ceph集群中重要的守护进程有:Ceph OSD、Cep…...
前端密码加密 —— bcrypt、MD5、SHA-256、盐
🐔 前期回顾悄悄告诉你:前端如何获取本机IP,轻松一步开启网络探秘之旅_彩色之外的博客-CSDN博客前端获取 本机 IP 教程https://blog.csdn.net/m0_57904695/article/details/131855907?spm1001.2014.3001.5501 在前端密码加密方案中ÿ…...
汽车UDS诊断深度学习专栏
1.英文术语 英文术语翻译Diagnostic诊断Onboard Diagnostic 在线诊断 Offboard Diagnostic离线诊断Unified diagnostic service简称 UDS 2.缩写表 缩写解释ISO国际标准化组织UDSUnified diagnostic service,统一的诊断服务ECU电控单元DTC 诊断故障码 ISO14229UD…...
macOS 下安装brew、nvm
1、brew: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" brew -v 查看版本 示例: 安装jdk brew search jdk 查询可用的jdk版本 brew install openjdk11 安装制定版本jdk 更换源࿱…...
【云原生】Kubernetes工作负载-StatefulSet
StatefulSet StatefulSet 是用来管理有状态应用的工作负载 API 对象 StatefulSet 用来管理某 Pod 集合的部署和扩缩, 并为这些 Pod 提供持久存储和持久标识符 和 Deployment 类似, StatefulSet 管理基于相同容器规约的一组 Pod。但和 Deployment 不同…...
Java:方法的重载
方法重载 为什么需要方法重载 在使用方法的过程中我们可能会遇到以下如同例子的情形: public class method1 {public static void main(String[] args) {int a1 10;int b1 20;double ret1 add(a1, b1);System.out.println("ret1 " ret1);do…...
7.react useCallback与useMemo函数使用与常见问题
react useCallback与useMemo函数使用与常见问题 useCallback返回一个可记忆的函数,useMemo返回一个可记忆的值,useCallback只是useMemo的一种特殊形式。 那么这到底是什么意思呢?实际上我们在父子通信的时候,有可能传递的值是一…...
Sentinel限流中间件
目录 介绍 Sentinel 的特征 Sentinel 的组成 实战使用 简单实例 配置本地控制台 使用可视化ui配置简单流控 配置异步任务限流 使用注解定义限流资源 SpringCloud整合Sentinel 简单整合 并发线程流控 关联模式 整合openFeign使用 介绍 随着微服务的流行࿰…...
使用ajax进行前后端交互的方法
使用ajax进行前后端交互的方法:(我只测试通了json对象作为参数的方式,其他方式我没有测试通过) 1、前端方法: 传参方式:POST 请求类型:json对象 响应类型:json对象 function test() …...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
