当前位置:网站首页>”sed“ shell脚本三剑客
”sed“ shell脚本三剑客
2022-08-01 21:13:00 【正大光明瑞士卷】
一、Sed概述
Sed是依赖于正则表达式的文本处理工具,可以读取文本内容,根据指定条件对其进行添,删,改,换等操作,被广泛应用于shell脚本以完成自动化处理任务;
Sed在处理数据时默认不直接修改源文件,而是把当前处理的行储存在临时缓存区中,所有的指令都在缓冲区中操作,处理完成后,把缓冲区的内容默认输出到屏幕,接着处理下一行内容,不断重复知道文件末尾,文件本身内容没有改变。
二、Sed基本语法
格式:sed [选项] [编辑指令] 文件1、2、......
常用选项:
-e 指定要执行的命令,只有一个编辑命令可省略 ;
-n 只输出处理后的行,读入时不显示 ;
-i 直接编辑文件,而不输出结果;
-f 使用指定的脚本来处理输入的文本文件;
-r E 使用拓展正则表达式
-s 将多个文件视为独立文件,而不是单个连续的长文件流
指令 | 作用 |
p | 输出指定的行 |
d | 删除指定的行 |
y | 字符替换,格式:”行范围 y/旧字符串/新字符串/g” |
s | 字串替换,格式:”行范围 s/旧字符串/新字符串/g” |
r | 读取指定文件 |
w | 保存为文件 |
i | 插入,在当前行前插入一行或多行 |
a | 加入,在当前行下面增加一行指定内容 |
d | 删除,删除指定的行的内容 |
c | 替换,将选定行替换为指定内容 |
例:
输出指定的行
[[email protected] test]# sed -n '4p' /test/test.txt2 #输出第四行内容
111
[[email protected] test]# sed -n '1,4p' /test/test.txt2 #输出1到4行
aaa
bbb
ccc
111
[[email protected] test]# sed -n 'n;p' /test/test.txt2 #输出奇数行
[[email protected] test]# sed -n 'p;n' /test/test.txt2 #输出偶数行
[[email protected] test]# sed -n '1,${n;p}' /test/test.txt2 #将第一行到最末尾的所有偶数行输出
[[email protected] test]# sed -n '1,+4p' test.txt2 #输出第一行开始的连续4行
[[email protected] test]# sed -n '/999/p' test.txt2 #将包含“999”的行进行输出,注意格式!
999
[[email protected] test]# sed -n '/999\|111/p' test.txt2 #输出包含“999”以及“111”的行
[[email protected] test]# sed -n '1,/999/p' test.txt2 #将从第一行到包含”999“的行进行输出
插入符合条件的行
[[email protected] test]# sed -i '/999/i whoami' test.txt2 #在匹配”999“的行之前插入whoami
[[email protected] test]# sed -i '/999/a whoami' test.txt2 #在匹配“999”的行之后插入whoami
[[email protected] test]# sed '3alk' test.txt2 #在第三行之后插入"lk"
*:如果要插入多行数据,除了最后一行外,每行末尾都要加”/n“来进行换行表示数据未结束
删除符合条件的行
[[email protected] test]# sed '1d' test.txt2 #删除第一行并输出
[[email protected] test]# sed '$d' test.txt2 #删除最后一行输出
[[email protected] test]# sed '^$d' test.txt2 #删除所有空行并输出
[[email protected] test]# sed '1,2d' test.txt2 #删除1到2行并输出
[[email protected] test]# sed '/999/d' test.txt2 #删除包含”999“的行并输出
[[email protected] test]# sed '/999/!d' test.txt2 #取反删除包含”999“的行并输出(不包含”999“的行)
[[email protected] test]# sed '/^999/d' test.txt2 #删除”999“开头的行并输出
[[email protected] test]# sed '/999$/d' test.txt2 #删除”999“结尾的行并输出
替换符合条件的文本
[[email protected] test]# sed 's/000//g' test.txt2 #将”000“删除
[[email protected] test]# sed '/kkk/c lll' test.txt2 #将”kkk“替换为”lll“
[[email protected] test]# sed 's/999/000/2p' test.txt2 #将所有包含”999“的第二个”999“替换为”lll“
迁移符合条件的文本
[[email protected] test]# sed '/777/w test2' test.txt #将包含“777”的行内容保存到test2
边栏推荐
猜你喜欢
随机推荐
tiup mirror genkey
kubernetes各名词缩写
对C语言结构体内存对齐的理解
移植MQTT源码到STM32F407开发板上
空间数据库开源路,超图+openGauss风起禹贡
技能大赛训练:A部分加固题目
JSD-2204-Knife4j框架-处理响应结果-Day07
技术栈概览
写给刚进互联网圈子的人,不管你是开发,测试,产品,运维都适用
响应式织梦模板清洁服务类网站
包含吲哚菁绿的多聚体白蛋白纳米球/载马钱子碱纳米粒的牛血清白蛋白微球的制备
ISC2022 HackingClub白帽峰会倒计时1天!最全议程正式公布!元宇宙集结,精彩绝伦!
C语言_枚举类型介绍
Realize the superposition display analysis of DWG drawing with CAD in Cesium
封装一个管理 url 状态的 hook
C Expert Programming Chapter 1 C: Through the Fog of Time and Space 1.1 The Prehistoric Phase of the C Language
PyTorch笔记 - Attention Is All You Need (2)
C语言之字符串函数二
Jmeter实战 | 同用户重复并发多次抢红包
property语法