Shell编程(三)grep sed awk文本处理三剑客
上一章:
Shell编程(二)_做测试的喵酱的博客-CSDN博客
一、ps命令
指令: ps
作用: 主要是查看服务器的进程信息
选项含义:
-e:等价于 ‘-A’ ,表示列出全部的进程
-f:显示全部的列(显示全字段)

二、 grep (文本过滤)
grep主要用于过滤。对文本按行来过滤。如果某一行包含要搜索的关键字,则会把这一整行输出出来。
2.1 grep基础使用方法
查看grep 帮助文档 grep --help
[root@ecs-39233 chenshuai]# grep --help
Usage: grep [OPTION]... PATTERN [FILE]...
Search for PATTERN in each FILE or standard input.
PATTERN is, by default, a basic regular expression (BRE).
Example: grep -i 'hello world' menu.h main.c
grep应用的两种形式
形式一:对一个文件/多个文件,进行搜索。
grep [OPTION]... PATTERN [FILE1,FILE2 ... ]
[OPTION] 可选项,可填写以下内容
PATTERN 关键字,被搜索的关键字。从文件FILE1 FILE2 搜索包含关键字 PATTERN 的行。
形式二:执行命令时,在命令结果中搜索数据
some command | grep [option] pattern
[OPTION] 可选项,可填写以下内容
PATTERN 关键字,被搜索的关键字。可以有没有引号,可以单引号,可以双引号。
如果没有引号,PATTERN 关键字中不能有空格。
单引号,PATTERN 关键字中的变量不能解析,搜索的什么就是什么
双引号,可以解析PATTERN 关键字中的变量。
将一个命令(command)的输出,通过管道符|传给后面的grep命令。
在第一个命令的输出结果中,搜索关键字pattern
| 选项 | 作用 |
| -i | 忽略大小写 |
| -c | 只输出匹配行的数量 |
| -n | 显示行号 |
| -r | 递归搜索 |
| -E | 支持拓展正则表达式 |
| -W | 匹配整个单词 |
| -I | 只列出匹配的文件名 |
| -F | 不支持正则,按字符串字面意思进行匹配 |
例子1
搜索在当前Linux系统中(/etc/passwd),是否存在某一个用户。
是否存在root用户
grep root /etc/passwd
[root@ecs-39233 ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@ecs-39233 ~]#
是否存在miao用户
[root@ecs-39233 ~]# grep miao /etc/passwd
[root@ecs-39233 ~]#
例子2
查看当前系统,java进程信息
ps -ef |grep java
查看tomcat进程信息
ps -ef |grep tomcat
例子3 忽略大小写 -i
忽略大小写 -i
grep 默认不忽略大小写。 grep -i 忽略大小写。
不忽略大小写
[root@ecs-39233 ~]# echo "Hello world" |grep hello
[root@ecs-39233 ~]#
忽略大小写
[root@ecs-39233 ~]# echo "Hello world" |grep -i hello
Hello world
例子3 统计总数量 -c
统计总数量 -c
查看Linux用户文件。/etc/passwd
[root@ecs-39233 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
这种nologin结尾的用户,是没有登录权限的用户。
统计一下 /etc/passwd 中,有多少个用户没有登录权限。-c
[root@ecs-39233 ~]# grep -c "/sbin/nologin" /etc/passwd
16
例子4 搜索多个文件
1、搜索多个文件
在 test_while.sh test_read_n.sh 这两个文件中,搜索"/bin/bash" 字符串
[root@ecs-39233 ~]# grep "/bin/bash" test_while.sh test_read_n.sh
test_while.sh:#!/bin/bash
test_read_n.sh:#!/bin/bash
2、对目录进行过滤 -r
我想在/chenshuai 目下,对所有的文件进行搜索。搜索"/bin/bash" 字符串
grep -r "/bin/bash" /chenshuai
[root@ecs-39233 chenshuai]# grep -r "/bin/bash" /chenshuai
/chenshuai/study_shell.sh:#!/bin/bash
/chenshuai/until.sh:#!/bin/bash
/chenshuai/miao_test.sh:#!/bin/bash
3、过滤时,只打印文件名称。不打印命中的字符串 -l
grep -rl "/bin/bash" /chenshuai
/chenshuai/study_shell.sh
/chenshuai/until.sh
/chenshuai/miao_test.sh
例子5 过滤目标行的前后数据
显示目标行的后几行数据 -A
显示目标行的前几行数据-B
显示目标行的前后各几行数据 -C
查看grep 帮助文档
grep --help
查看grep帮助文档,中的-A 用法。("\-A" 转义)
grep --help | grep "\-A"
[root@ecs-39233 ~]# grep --help | grep "\-A"-A, --after-context=NUM print NUM lines of trailing context
显示目标行的后几行数据(-A ,after)
查看-A 这一行,及后3行数据。
grep --help | grep -A3 "\-A"

查看- B这一行,及前4行的数据。

显示目标行的前后各几行数据 -C
查看目前行的前后各2行数据
grep --help|grep -C2 "\-C"

2.2 grep + 正则
2.2.1 基础正则
^ 以x开头$ 以x结尾.*[][^]
在文件中搜索,以"r"开头的字符串
grep '^r' /etc/passwd

2.2.2 扩展正则 grep -E 或者 egrep
扩展正则:(常用)
{}()|+?
在 文件中,匹配手机号
grep -E '^1[3456789]\d{9}$' /etc/xxx.log
egrep '^1[3456789]\d{9}$' /etc/xxx.log
2.2.3 过滤多个关键字
我想在文件中,搜索 文件中,包含-E -A -B 多个关键字的数据(这几个关键字是或的关系)
注意:
过滤多个关键字,需要使用正则中的管道符 | 表示或的关系
正则中的管道符| ,属于扩展正则,需要使用grep -E 或者egrep
-E 需要转移 \-E
grep --help | egrep '\-E|\-A\-B'
grep --help | grep -E '\-E|\-A|\-B'

2.3 grep 编写Shell 脚本
实现功能:
shell脚本,实现查看cpu 核数。
Linux知识小拓展:
使用top命令,查看linux信息。然后按1,顶部就会显示所有的cpu使用信息。
查看cpu的配置信息,
cat /proc/cpuinfo
里面,每一个核都有一个model name,所以统计cpu核数量,可以通过统计model name 文本数量实现。
grep -c "model name" /proc/cpuinfo
三、 sed (对文件进行增删改查处理)
作用:
sed流编辑器,对文件进行增删改查的处理。
我们日常对文件进行处理,使用vim命令。但是在shell脚本中,不能使用vim处理文本,vim是一个交互式的命令,我们可以使用sed命令。
处理文本方式:
按照行来处理文本,与grep相似。
两种形式:
方式一:对文件进行处理
sed [option] "pattern command" file
[option] 可选的扩展项目,如-n -f -r等
pattern 要搜索的关键词。pattern 为空的话,默认是对每一行进行处理。
cmond 对命中的这一行数据,做何种处理。(处理命令)
file 文件路径
sed打印时,默认会把原数据打印出来。
方式二: 对命令的输出结果做处理
some command | sed [option] "pattern command"
将一个命令command的输出结果,传给sed处理。
sed 在这个结果中,寻找匹配行,然后对这一匹配行进行处理。
| 选项 | 作用 |
|---|---|
| -n | 只打印模式匹配的行 |
| -f | 加载存放动作的文件 |
| -r | 支持拓展正则 |
| -i | 支持修改文件 |
3.1 打印文件
sed 'p' /etc/passwd
没有搜索词,默认对每一行都处理。
'p' 打印命令,print简写 。
[root@ecs-39233 ~]# sed 'p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
发现,passwd文件中,每一行数据,都打印了两遍。因为sed打印了一遍原数据,还打印了一遍命中数据,所以打印了两遍。
-n 只打印模式匹配的行。(只打印1行)
sed -n 'p' /etc/passwd
[root@ecs-39233 ~]# sed -n 'p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
3.2 匹配词pattern 的四种类型
3.2.1 使用行号过滤,pattern 为行号
方式一:对文件进行操作
sed -n "第几行 操作命令" 文件路径
pattern 为具体的行号。
如,打印第3行内容
sed -n '3 p' /etc/passwd
[root@ecs-39233 ~]# sed -n '3 p' /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@ecs-39233 ~]#
方式二 对一个命令的结果进行处理
cat /etc/passwd | sed -n '3 p'
对cat的运行结果,打印第3行的数据。
[root@ecs-39233 ~]# cat /etc/passwd | sed -n '3 p'
daemon:x:2:2:daemon:/sbin:/sbin/nologin
对连续的行进行处理 'x,y command'
如,打印第4行到第8行的数据
sed -n '4,8 p' /etc/passwd
[root@ecs-39233 ~]# sed -n '4,8 p' /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
[root@ecs-39233 ~]#
3.2.2 使用正则过滤,pattern 为正则表达式
表达式:
sed -n '/正则表达式/ 操作命令' 文件路径
举例,打印/etc/passwd 文件中,包含root的行
sed -n '/root/ p' /etc/passwd
[root@ecs-39233 ~]# sed -n '/root/ p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
对所有s开头的行,进行打印 /^s p/
sed -n '/^s/ p' /etc/passwd
[root@ecs-39233 ~]# sed -n '/^s/ p' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
遇到/要使用转义
如,打印包含 /sbin/nologin 的行,其中/ 需要进行转义
sed -n -e '/\/sbin\/nologin/ p' /etc/passwd
[root@ecs-39233 ~]# sed -n -e '/\/sbin\/nologin/ p' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
-r 支持拓展正则
sed 只默认只支持基本正则,拓展正则需要加-r
举例:
打印包含2个o的行,o{2}
sed -n -r '/o{2}/ p' /etc/passwd
[root@ecs-39233 ~]# sed -n -r '/o{2}/ p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
多个正则的使用,实现过滤以x行到y行的数据。
注意,这里的多个正则,不是或的关系,而是 x行到y行 的意思。
举例,我要过滤,以adm开头的行,到以mail开头行的数据
sed -n '/^adm/,/^mail/ p' /etc/passwd
[root@ecs-39233 ~]# sed -n '/^adm/,/^mail/ p' /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin


四、 awk
相关文章:
Shell编程(三)grep sed awk文本处理三剑客
上一章: Shell编程(二)_做测试的喵酱的博客-CSDN博客 一、ps命令 指令: ps作用: 主要是查看服务器的进程信息选项含义: -e:等价于 ‘-A’ ,表示列出全部的进程 -f:显示全部的列&am…...
一步步带你学习Python编程:从零开始的查缺补漏
在快节奏的生活中,很难找到时间来学习新的技能。但有时候,我们会突然发现自己有一些空闲时间,而又不想虚度光阴。无聊的时候,我们可以选择学习一项新技能来充实自己。最近,我就因为有些无聊,决定重新学习Py…...
常见容器的方法
常见容器 向量 (vector)常用方法代码实例 列表 (list)常用方法 集合 (set)常用方法 映射 (map)方法 向量 (vector) 常用方法 vector::push_back(): 将元素插入向量尾部。 vector::pop_back(): 弹出向量尾部的元素。 vector::insert(): 在指定位置插入元素。 vector::erase():…...
【Linux】线程
1.理解地址空间和页表 1.地址空间是进程能够看到的资源窗口 2.页表决定进程真正拥有的资源情况 3.合理的对地址空间和页表进行资源划分就可以对一个进程的所有资源进行划分:过地址空间分为栈区、堆区…通过页表映射到不同的物理内存。 在32位平台下,…...
ASP.NET Core MVC 从入门到精通之wwwroot和客户端库
随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,…...
Oracle OCI 修改 Compute Instance Hostname
Oracle OCI 修改 Compute Instance Hostname Oracle Linux 7 及之后的版本 Oracle Linux 7 及之后的版本 1, Update the /etc/hostname file with below command. hostnamectl set-hostname <new name>2, Edit the oci configuration file for hostnames as given belo…...
垃圾收集算法面试总结
垃圾收集算法 标记 - 清除算法 首先标记出所有需要被回收的对象,标记完后统一回收所有被标记的对象。 后续的收集算法都是基于这种思路并对其不足进行改进而得到的。 这种方法主要有两个缺点: 一个是效率问题,标记和清除两个过程的效率都…...
grep替换指定字符串方法
在 Linux 命令行中,可以使用 grep 命令来查找匹配某个模式的字符串,并将其替换为另一个字符串。具体方法如下: grep -rl <pattern> <directory> | xargs sed -i s/<old_string>/<new_string>/g其中,<…...
主从模式、哨兵模式、集群模式(cluster)
主从模式、哨兵模式、集群模式(cluster) redis 实现高可用的方式分为 主从模式、哨兵模式、集群模式(cluster) 1. 主从模式(又称为主从复制) 表现为1个主节点,多个从节点,主节点负…...
题目3180:蓝桥杯2023年第十四届省赛真题-互质数的个数======及探讨互质专题
原题链接 https://www.dotcpp.com/oj/problem3162.html 想直接看题解的,跳转到第三次尝试即可。 已AC。 解析: (1)首先大家要知道什么叫互质: 以及它们的性质: 欧拉函数 在数论中,对正整…...
Java 文件操作
字符流-Writer和Reader用于读取文本-BufferedReader(new FileReader("path")) 读取文本文件-BufferedWriter(new FileWriter("path")) 写入到文本文件 字节流-InputStream和OutputStream图片、二进制文件-BufferedInputStream(new FileInputStream(new F…...
二叉树OJ题(C++实现)
文章目录 1.二叉树的层序遍历2. 二叉树的最近公共祖先3.二叉搜索树与双向链表4.从前序与中序遍历序列构造二叉树 1.二叉树的层序遍历 二叉树的层序遍历 OJ连接 主要思路是借助一个队列,将每一层的数据以size统计,当size为0时说明该层数据已经输入完&…...
grep -nr 命令查询字符串方式
grep -nr “搜索内容” 文件路径 其中: -n:显示行号-r:递归查找子目录中的文件“搜索内容”:要搜索的内容文件路径:要搜索的文件路径,可以是单个文件或目录路径(将会递归搜索该目录下的所有文…...
AgentAI+ChatGPT给出答案-为什么即时通讯需要心跳
序言 人工智能ChatGpt 结合系统化的问题拆解, 现在已经能够进行问题的拆解与自问自答, 预计未来很多的脑力工作要被释放了, 作为即时通讯的开发人员, 我问问专业的问题 为什么即时通讯需要心跳 先看产品界面与使用结果 问题拆解过程 执行任务1: 概念搜索 “Executing “Res…...
跨平台跨端的登录流程及其安全设计
跨平台跨端的登录流程及其安全设计 目录 跨平台跨端的登录流程及其安全设计 一、登录流程 1.1、登录流程时序图 1.2、三方App 登录 1.3、请求的路由守卫 二、注册流程 2.1、注册流程时序图 2.2、多因素认证 2.3、自动跳转登录页面 三、涉及的技术与安全 3.1、用户…...
如何在Java中创建临时文件?
在Java程序中,有时需要创建临时文件来暂存数据或者执行某些操作。Java提供了许多方式来创建临时文件。在本教程中,我们将介绍如何使用Java标准库来创建临时文件。 一、使用File.createTempFile()方法 Java标准库中的File类提供了createTempFile()方法来…...
Vue表单基本操作-收集表单数据
收集表单数据 使用vue中的v-model收集表单里面的数据,不同的表单元素配合v-model会有不同的写法和技巧 本次的表单元素包括:文本框,单选,多选,下拉框,文本域 编写表单元素 首先编写表单元素,…...
Android 一个获取网址时间的Demo
Android 一个获取网址时间的Demo 文章目录 Android 一个获取网址时间的Demo通过一个网址获取时间的代码关于Android NTP 时间Android 同步时间代码 前段时间有个客户想用局域网同步Android 设备的时间,开发后把这个demo分享一下。 效果: 这里也获取了阿…...
ijkplayer解码流程源码解读
ijkplayer是一款基于ffmpeg的在移动端比较流行的开源播放器。FFmpeg是一款用于多媒体处理、音视频编解码的自由软件工程,采用LGPL或GPL许可证。 要想理解ijkplayer源码,首先得知道视频播放器的基本原理。 视频播放器播放一个互联网上的视频文件…...
2023年值得关注的3个品牌趋势,帮你弯道超车
2023年,大环境开放,压抑三年的消费蓄势待发,品牌如何唤醒消费者的、热情成了重中之重的大事。 春风和煦,万物生长。又到了各类品牌、各位营销人踌躇满志、斗志昂扬的时候了,浅析一下2023品牌宣传趋势,抓住…...
技能管理框架skill-mix:用YAML与声明式配置构建可量化技能体系
1. 项目概述与核心价值最近在梳理团队的知识库和技能树时,我又一次深刻体会到,一个清晰、可量化、可追踪的技能管理体系对个人成长和团队效能有多重要。无论是作为技术负责人评估团队战斗力,还是作为一线开发者规划自己的学习路径,…...
华硕笔记本终极优化神器:GHelper完整使用教程
华硕笔记本终极优化神器:GHelper完整使用教程 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Expertbook…...
基于Adafruit NeoTrellis M4打造自定义物理宏键盘:HID协议与CircuitPython实战
1. 项目概述:从通用键盘到专属启动台 如果你和我一样,每天要在电脑前处理大量任务,频繁地在不同应用间切换,或者需要执行一系列固定的快捷键操作,那么你肯定对“效率工具”有着执着的追求。我们习惯了通用键盘的“Ctrl…...
Claude代码系统提示词:提升AI编程效率的工程化实践
1. 项目概述与核心价值最近在AI编程辅助领域,一个名为“Piebald-AI/claude-code-system-prompts”的项目在开发者社区里引起了不小的讨论。简单来说,这是一个专门为Claude(特别是Claude 3系列模型)设计的、用于提升代码生成与编程…...
巧用邮件合并批量生成带条形码的证件标签
1. 为什么需要批量生成带条形码的证件标签? 在日常办公中,我们经常会遇到需要批量制作证件标签的情况。比如学校图书馆要给新生办理借书证,公司要给新员工制作工牌,或者社区要给居民发放会员卡。传统的手工制作方式不仅效率低下&…...
诺和诺德牵手OpenAI,能否夺回“药王”之位?
01 诺和诺德牵手OpenAI就在最近,诺和诺德(Novo Nordisk)宣布与OpenAI合作,消息发布后,诺和诺德股价短线上涨近4%。很多人或许不知道“诺和诺德”,但“司美格鲁肽”却广为人知,诺和诺德正是研发出…...
数据中心网络卡顿?可能是你的链路聚合负载均衡没配对!详解华为交换机src-dst-ip哈希算法
数据中心网络卡顿?华为交换机src-dst-ip哈希算法深度调优指南 在数据中心网络运维中,链路聚合(Link Aggregation)技术早已成为提升带宽和可靠性的标配方案。但许多工程师在完成基础配置后,常常遇到一个令人头疼的现象&…...
华为设备IPv6配置保姆级教程:从接口地址到静态路由,一次搞定
华为设备IPv6实战配置指南:从零搭建下一代网络架构 当企业网络从IPv4向IPv6迁移时,华为设备的配置逻辑与操作细节往往成为新手工程师的第一道门槛。不同于传统IPv4网络,IPv6的地址结构、邻居发现机制和路由配置都有其独特之处。本文将基于华为…...
VMware ESXi版本回退全攻略:从适用条件、DCUI操作到6.x升7.0的‘后悔药’失效分析
VMware ESXi版本回退深度解析:从技术原理到实战避坑指南 在虚拟化运维领域,版本升级往往伴随着不可预知的风险。当新版本出现兼容性问题或性能异常时,版本回退能力就成为系统管理员手中的"后悔药"。然而,不同于普通软件…...
学妹问降AI率工具选哪个性价比最高?4款降AI软件1万字花多少过AIGC检测
学妹问降AI率工具选哪个性价比最高?4款降AI软件1万字花多少过AIGC检测 学妹的具体问题 3 月 23 号晚上学妹问我:「学姐我送知网测了 AI 率 65%——市面降 AI 工具一堆我怎么选性价比最高的?预算 300 元以内」。 「性价比最高」是用户最常问…...
