当前位置: 首页 > news >正文

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工作过程

  1. 执行BEGIN{action;… }语句块中的语句。
  2. 从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
  3. 当读至输入流末尾时,执行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"的行

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring6梳理6——依赖注入之Setter注入
  • Python-FLASK上传文件
  • VScode 使用记录
  • 风机设计基础
  • 校园失物招领系统小程序的设计
  • 基于xr-frame实现微信小程序的人脸识别3D模型叠加AR功能(含源码)
  • 射频放大管的使用简略
  • vite创建的vue项目怎么使用jsx来实现elementPlus表格表尾的合计有多行大的方法
  • @antv/g6 业务场景:流程图
  • 线性表之栈
  • python无法连接SQL SERVER问题解决
  • fedora siliverblue adb
  • python---爬取QQ音乐
  • python办公自动化:使用`Python-PPTX`自动化与批量处理
  • 防御网站数据爬取:策略与实践
  • Angular4 模板式表单用法以及验证
  • co.js - 让异步代码同步化
  • Shell编程
  • Spring Boot快速入门(一):Hello Spring Boot
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Terraform入门 - 3. 变更基础设施
  • 程序员最讨厌的9句话,你可有补充?
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 经典排序算法及其 Java 实现
  • 判断客户端类型,Android,iOS,PC
  • 深入 Nginx 之配置篇
  • 使用 @font-face
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • -- 数据结构 顺序表 --Java
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 一个项目push到多个远程Git仓库
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 正则表达式
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • $.ajax()方法详解
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (二)换源+apt-get基础配置+搜狗拼音
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (十)c52学习之旅-定时器实验
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (四) Graphivz 颜色选择
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (未解决)macOS matplotlib 中文是方框
  • .FileZilla的使用和主动模式被动模式介绍
  • .gitignore文件—git忽略文件
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .Net Core 微服务之Consul(二)-集群搭建
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET 中 GetProcess 相关方法的性能
  • .Net程序帮助文档制作