6 - Shell编程之sed与awk编辑器
目录
一、sed
1.概述
2.sed命令格式
3.常用操作的语法演示
3.1 输出符合条件的文本
3.2 删除符合条件的文本
3.3 替换符合条件的文本
3.4 插入新行
二、awk
1.概述
2. awk命令格式
3.awk工作过程
4.awk内置变量
5.awk用法示例
5.1 按行输出文本
5.2 按字段输出文本
一、sed
1.概述
sed是一个强大的文本处理工具,其名称是Stream Editor(流编辑器)的缩写。它被设计用于根据用户定义的规则对文本进行逐行处理和转换。
Sed通过从输入流中逐行读取文本,并根据用户指定的命令来对每一行进行处理。
2.sed命令格式
sed "选项" "操作语法" "参数"
| 常用选项 | 解释 |
|---|---|
| -n | 不进行打印输出 |
| -i | 直接对源文件进行编辑 |
| -f | 表示用指定的脚本文件来处理输入的文本文件 |
| -r | 使用扩展正则表达式 |
| -e | 多点编辑 |
| 常用操作语法 | 解释 |
|---|---|
| s | 替换指定字符 |
| d | 删除指定行 |
| a | 指定行下方插入行 |
| i | 指定行上方插入行 |
| c | 替换指定行 |
| y | 字符转换,转换前后字符长度必须相同 |
| p | 打印 |
3.常用操作的语法演示
3.1 输出符合条件的文本
例:
sed -n 'p' a.txt #输出所有内容
sed -n '3p' a.txt #输出第三行
sed -n '3,5p' a.txt #输出第三到五行
sed -n '3p;5p' a.txt #输出第三行和第五行
sed -n 'p;n' a.txt #输出所有奇数行(输出一行隔一行再输出)
sed -n 'n;p' a.txt #输出所有偶数行(隔一行输出再隔一行输出)
sed -n '3,9p;n' a.txt #输出三到九行之间的奇数行
sed -n 'n;3,9p' a.txt #输出三到九行之间的偶数行
sed -n '/word/p' a.txt #输出包含"word"的行
sed -n '/abc/,/123/p' a.txt #输出包含"abc"与"123"之间的行
sed -n '/abc/p;/123/p' a.txt #输出包含"abc"或者包含"123"的行
3.2 删除符合条件的文本
sed '3d' a.txt #删除第三行
sed '3,5d' a.txt #删除第三到五行
sed '/word/d' a.txt #删除包含word的行
sed '/word/!d' a.txt #删除不包含word的行
......
3.3 替换符合条件的文本
sed 's/abc/123/' a.txt #将每行第一个"abc"替换为"123"
sed 's/abc/123/g' a.txt #全局替换g=global,将所有"abc"替换为"123"
sed 's/#//g' a.txt #将所有"#"替换为空字符
sed 's/^/#/ a.txt #将每行行首插入"#"
sed '3s/word/abc/ a.txt #将第三行中的"word"替换为"abc"
sed '3,5s/word/abc/ a.txt #将第三到五行中的"word"替换为"abc"
sed '/abc/,/123/s/word/num/ a.txt #将包含"abc"和"123"之间的行的"word"替换为"num"
......
3.4 插入新行
sed '/word/a123' a.txt #在所有包含"word"的行下方插入行"123"
sed '/word/i123' a.txt #在所有包含"word"的行上方方插入行"123"
sed '3a123' a.txt #在第三行下方插入行"123"
sed '3i123' a.txt #在第三行上方插入行"123"
二、awk
1.概述
在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,默认以空格或tab键作为分隔符作为分隔,并按模式或者条件执行编辑命令。
2. awk命令格式
awk 选项 '操作符 {编辑指令}' 处理对象
- { }外指定条件,{ }内指定操作
3.awk工作过程
- 执行BEGIN{action;… }语句块中的语句。
- 从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
- 当读至输入流末尾时,执行END{action;…}语句块
- BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中
- END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块
4.awk内置变量
| 内置变量 | 解释 |
|---|---|
| FS | 指定每行文本的字段分隔符,默认为空格或制表位(tab) |
| NF | 当前处理的行的字段个数 |
| NR | 当前处理的行的行号 |
| $0 | 当前处理的行的整行内容 |
| $n | 当前处理行的第 n 个字段(第 n 列) |
| OFS | 输出内容的列分隔符 |
| FILENAME | 被处理的文件名 |
| RS | 行分隔符 |
5.awk用法示例
5.1 按行输出文本
awk '{print}' a.txt #输出所有内容,类似于cat
awk '{print $0}' a.txt #同上,"$0"代表整行内容
awk '{print NR}' a.txt #打印行号
awk '{print NR,$0}' a.txt #打印行号+所有内容
awk 'NR==3{print}' a.txt #打印第三行内容
awk 'NR==3,NR==5{print}' a.txt #打印第三到五行内容
awk '(NR>=3)&&(NR<=5){print}' a.txt #同上
awk 'NR==3;NR==5{print}' a.txt #打印第三行和第五行内容
awk 'NR%2==0{print}' a.txt #打印偶数行内容
awk 'NR%2==1{print}' a.txt #打印奇数行内容
awk '/^word/{print}' a.txt #打印以"word"开头的行
awk '/word$/{print}' a.txt #打印以"word"结尾的行
5.2 按字段输出文本
awk '{print $3}' a.txt #打印每行第三个字段(列)的内容
awk '{print $3,$5}' a.txt #打印每行第三列和第五列的内容
awk -F: '{print $3}' a.txt #打印以":"作为分隔符,每行第三个字段的内容
awk -F: '$3>10{print}' a.txt #打印以":"为分隔符,第三个字段大于10的每行内容
awk '{if($3>10){print}}' a.txt #同上
awk '$5~"word"{print $3,$NF}' a.txx #打印第五字段包含"word"所在行的第三个字段和最后一个字段
awk '($3=="word")&&($5=="name"){print}' #打印第三个字段为"word"且第五个字段为"name"的行
相关文章:
6 - Shell编程之sed与awk编辑器
目录 一、sed 1.概述 2.sed命令格式 3.常用操作的语法演示 3.1 输出符合条件的文本 3.2 删除符合条件的文本 3.3 替换符合条件的文本 3.4 插入新行 二、awk 1.概述 2. awk命令格式 3.awk工作过程 4.awk内置变量 5.awk用法示例 5.1 按行输出文本 5.2 按字段输出文…...
什么是XML文件,以及如何打开和转换为其他文件格式
本文描述了什么是XML文件以及它们在哪里使用,哪些程序可以打开XML文件,以及如何将XML文件转换为另一种基于文本的格式,如JSON、PDF或CSV。 什么是XML文件 XML文件是一种可扩展标记语言文件。它们是纯文本文件,除了描述数据的传输、结构和存储外,本身什么也不做。 RSS提…...
海外直播对网速、带宽、安全的要求
要满足海外直播的要求,需要拥有合适的网络配置。在全球化的浪潮下,海外直播正逐渐成为企业、个人和各类组织的重要工具。不论是用于市场推广、品牌宣传,还是与观众互动,海外直播都为参与者带来了丰富的机会。然而,确保…...
UWB定位室外基站
定位基站,型号SW,是一款基于无线脉冲技术开发的UWB定位基站,基站可用于人员、车辆、物资的精确定位, 该基站专为恶劣环境使用而设计,防尘、防水等级IP67,工业级标准支持365天连续运行,本安防爆可…...
高斯平面直角坐标讲解,以及地理坐标转换高斯平面直角坐标
高斯平面直角坐标系(Gauss-Krger 坐标系)是基于 高斯-克吕格投影 的一种常见的平面坐标系统,主要用于地理信息系统 (GIS)、测绘和工程等领域。该坐标系将地球表面的经纬度(地理坐标)通过一种投影方式转换为平面直角坐标,以便在二维平面中进行距离、面积和角度的计算。 一…...
C++入门(06)安装QT并快速测试体验一个简单的C++GUI项目
文章目录 1. 清华镜像源下载2. 安装3. 开始菜单上的 QT 工具4. 打开 Qt Creator5. 简单的 GUI C 项目5.1 打开 Qt Creator 并创建新项目5.2 设计界面5.3 添加按钮的点击事件5.4 编译并运行项目 6. 信号和槽(Signals and Slots) 这里用到了C类与对象的很多…...
一篇文章告诉你小程序为什么最近这么火?
微信小程序之所以最近这么火,主要得益于其低成本获取高流量、线上线下流量互换、社交裂变引爆流量以及封闭商业生态闭环等优势。下面将详细探讨小程序火爆的多个原因: 一篇文章告诉你小程序为什么这么火爆? 低成本获取高流量 无需安装注册&…...
Qt-常用控件(3)-多元素控件、容器类控件和布局管理器
1. 多元素控件 Qt 中提供的多元素控件有: QListWidgetQListViewQTableWidgetQTableViewQTreeWidgetQTreeView xxWidget 和 xxView 之间的区别,以 QTableWidget 和 QTableView 为例. QTableView 是基于 MVC 设计的控件.QTableView 自身不持有数据,使用 QTableView 的…...
【系统设计】主动查询与主动推送:如何选择合适的数据传输策略
基本描述总结 主动查询机制:系统A主动向系统B请求数据,采用严格的权限控制和身份认证,防止未授权的数据访问。数据在传输过程中使用TLS加密,并通过动态脱敏处理隐藏敏感信息。 推送机制:系统B在数据更新时主动向系统…...
mac 安装brew并配置国内源
前置条件 - Xcode 命令行工具 一行代码安装Homebrew 添加到路径(PATH) - zsh shell为例 背景介绍 最近重装了我的MAC mini (m1 芯片), 很多软件都需要重新安装,因为后续还需要安装一些软件,所以想着安装个包管理软件 什么…...
Temu官方宣导务必将所有的点位材料进行检测-RSL资质检测
关于饰品类产品合规问题宣导: 产品法规RSL要求 RSL测试是根据REACH法规及附录17的要求进行测试。REACH法规是欧洲一项重要的法规,其中包含许多对化学物质进行限制的规定和高度关注物质。 为了确保珠宝首饰的安全性,欧盟REACH法规规定&#…...
mysql高级sql
文章目录 一,查询1.按关键字排序1.1按关键字排序操作(1)按分数排序查询(不加asc默认为升序)(2)按分数降序查询(DESC)(3)使用where进行条件查询(4)使用ORDER BY语句对多个字段排序 1.2使用区间判断查询(and/…...
Linux CentOS 7.9 安装mysql8
1、新建mysql文件夹 数据比较大,所以我在服务器另外挂了一个盘装mysql,和默认安装一个道理,换路径即可 cd ../ //创建文件夹 mkdir mysql //进入mysql文件夹 cd mysql 2、下载mysql8.0安装包并解压、重命名 //下载安装包 wget https://dev…...
替代 Django 默认 User 模型并使用 `django-mysql` 添加数据库备注20240904
替代 Django 默认 User 模型并使用 django-mysql 添加数据库备注 前言 在 Django 项目开发中,默认的 User 模型虽然能够满足许多基础需求,但在实际项目中我们常常需要对用户模型进行定制化。通过覆盖默认的 User 模型,我们可以根据具体的业…...
三维激光扫描点云配准外业棋盘的布设与棋盘坐标测量
文章目录 一、棋盘标定板准备二、棋盘标定板布设三、棋盘标定板坐标测量一、棋盘标定板准备 三维激光扫描棋盘是用来校准和校正激光扫描仪的重要工具,主要用于提高扫描精度。棋盘标定板通常具有以下特点: 高对比度图案:通常是黑白相间的棋盘格,便于识别。已知尺寸:每个格…...
【Python知识宝库】文件操作:读写文件的最佳实践
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、文件读取1. 使用open函数2. 逐行读取3. 使用readlines和readline 二、文件写入1. 写入文本2. 追加内容3. 写入…...
Chapter 13 普通组件的注册使用
欢迎大家订阅【Vue2Vue3】入门到实践 专栏,开启你的 Vue 学习之旅! 文章目录 前言一、组件创建二、局部注册三、全局注册 前言 在 Vue.js 中,组件是构建应用程序的基本单元。本章详细讲解了注册和使用 Vue 的普通组件的两种方式:…...
u盘显示需要格式化才能用预警下的数据拯救恢复指南
U盘困境:需要格式化的紧急应对 在数字信息爆炸的时代,U盘作为便携的数据存储介质,承载着我们工作、学习乃至生活中的大量重要资料。然而,当U盘突然弹出“需要格式化才能用”的提示时,这份便捷瞬间转化为焦虑与不安。这…...
还不懂BIO,NIO,AIO吗
BIO(Blocking I/O)、NIO(Non-blocking I/O)和 AIO(Asynchronous I/O)是 Java 中三种不同的 I/O 模型,主要用于处理输入 / 输出操作。 一、BIO(Blocking I/O) 定义与工作原…...
物联网——DMA+AD多通道
DMA简介 存储器映像 某些数据在运行时不会发生变化,则设置为常量,存在Flash存储器中,节省运行内存的空间 DMA结构图 DMA访问权限高于cpu 结构要素 软件触发源:存储器到存储器传输完成后,计数器清零 硬件触发源&…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...
