首页 技术 正文
技术 2022年11月14日
0 收藏 701 点赞 5,136 浏览 3863 个字
我为什么要详细记录sed命令:

    sed 擅长取行。工作中三剑客使用频率最高,本篇文章将对sed命令常用的 增,删,改,查
进行详细讲解,以备以后工作中遗忘了查询,sed命令是作为运维人员来说,必须必掌握的技能如果三剑客你不会,那么你不用做运维了。
sed简介:是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

添加测试文本:

cat >sed.log<<“EOF”

101,$oldboy,CEO102,$zhangyao,CTO103,$Alex,COO104,$yy,CFO105,$feixue,CIO>>”EOF”

sed的语法格式:

sed [选项] [指令] [输入文件]

sed命令的执行流程:

sed命令是把文件一行行的读到内存中当成一行处理, 它也被称为流编辑器,跟车间中的流水线一样,一行一行的逐个处理。获取到需要的内容后显示到屏幕上。

sed原理:sed 读取一行内容后,sed判断是否满足条件

sed版本查看:

 sed -v

sed基础参数:

-n 取消默认输出-r 支持正则表达式-p 打印-e 多项编辑-i.bak  修改后备份 s 搜索一次sg 搜索全局# # #  : s#替换前#替换后#g/ / / : 与###一样

sed功能详解:

sed增加:

-i : 在 XX行的下一行增加内容-a: 在XX行的上一行增加内容

sed  i参数 :演示
增:
案例1:sed单行增加
[root@chenleilei ~]# sed ‘2i nihaoya’ sed.log

101,$oldboy,CEO

nihaoya

102,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

案例2:sed行前多行增加
[root@chenleilei ~]# sed ‘2i nihaoya\nwohenhao’ sed.log

101,$oldboy,CEO

nihaoya

wohenhao

102,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

-a:演示

【增】案例1:sed行后单行增加
[root@chenleilei ~]# sed ‘2a nihaoya’ sed.log

101,$oldboy,CEO

102,$zhangyao,CTO

nihaoya

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO 

【增】案例2:sed行后多行增加
[root@chenleilei ~]# sed ‘2a nihaoya\nwohenhao’ sed.log101,$oldboy,CEO102,$zhangyao,CTOnihaoyawohenhao103,$Alex,COO104,$yy,CFO105,$feixue,CIO
【增】案例3:sed 不同行多项增加 sed -e
[root@chenleilei ~]# sed -e ‘2i 123’ -e ‘5i 456’ sed.log

101,$oldboy,CEO

123

102,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

456

105,$feixue,CIO

sed删除 (d)

【删】sed删除案例1: 删除指定行

[root@chenleilei ~]# sed ‘4d’ sed.log

101,$oldboy,CEO

102,$zhangyao,CTO

103,$Alex,COO

105,$feixue,CIO

【删】sed删除案例2:删除连续的行

[root@chenleilei ~]# sed ‘2,4d’ sed.log

101,$oldboy,CEO

105,$feixue,CIO

【删】sed删除案例3:删除不连续的行

seq 10 |sed -e{2,4,8}d    ##注意这里不能添加引号或者双引号,否则报错

【删】sed 删除案例4: 删除 n和n 匹配的行

[root@chenleilei ~]# sed -nr ‘/103|105/!p’ sed.log 
101,$oldboy,CEO
102,$zhangyao,CTO
104,$yy,CFO                ### !除了103.105开头的行 都删除 然后打印

【改.替换】sed修改案例1:

修改: 案例1:修改单个字符

[root@chenleilei ~]# sed ‘s#102#1031#g’ sed.log

101,$oldboy,CEO

1031,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

案例2: 修改101为109

[root@chenleilei ~]# sed -r ‘1s#[0-9]+#109#’ sed.log

109,$oldboy,CEO

102,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

案例3: 把101改为oldboy  —-报错原因:sed -r 一个一个读取,读取到有数字就改为oldboy,这里有3个数字,所以出现了3个oldboy

[root@chenleilei ~]# sed ‘1s#[0-9]#oldboy#g’ sed.log

oldboyoldboyoldboy,$oldboy,CEO

102,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

解决办法(-r):
[root@chenleilei ~]# sed -r ‘1s#[0-9]+#oldboy#g’ sed.log

oldboy,$oldboy,CEO

102,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

如果配错了那么3个oldboy 如何改回101呢?
[root@chenleilei ~]# sed -r ‘1s#(oldboy)+#101#’ sed.log

101,$oldboy,CEO

102,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

如果你写成了
sed -r ‘1s#(oldboy)+#101#g’ sed.log  
也会不成功,那是因为 他有g选项,会全部替换,也就是3个oldboy。解决办法
把 oldboy 使用括号括起来,然后使用 s 尾部的g不要使用,g就是变成3个oldboy的源泉

sed -ri 修改后备份,但是,i 必须要放在最后,否则无法备份例子: sed -ri ‘/^123/d’ 1.txt
sed -i 的工作原理:    sed -i.bak修改文件的时候,他会把源文件移动,然后创建新的文件,写入这个命令的结果。
可以通过修改文件后使用 ls -il  x x.bak   来查看 x文件 和他的备份文件 x.bak 。你会发现他们的inode就不一样了。这就是sed -i.bak 的原理

小问题:echo用来给文件追加多行内容的时候,需要使用 echo -e

【查询】  |  是正则符号需要加r
[显示] 1到4行

[root@chenleilei ~]# sed -n ‘1,4p’ sed.log101,$oldboy,CEO102,$zhangyao,CTO103,$Alex,COO104,$yy,CFO

【查询】  |  是正则符号需要加r
  排除1-4行

[root@chenleilei ~]# sed -n ‘1,4!p’ sed.log

105,$feixue,CIO

[查询]显示2 4 两行

[root@chenleilei ~]# sed -nr ‘/2|4/p’ sed.log

102,$zhangyao,CTO

104,$yy,CFO


[查询] 查询103开头的行

[root@chenleilei ~]# sed -n ‘/^103/p’ sed.log

103,$Alex,COO

[查询] 查询103结尾的行

[root@chenleilei ~]# sed -n ‘/$103/p’ sed.log 
103,$Alex,COO,103

[查询] 查询103开头105开头的行(正则)

[root@chenleilei ~]# sed -n ‘/^103/,/^105/p’ sed.log

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

[查询] 查询 105以及 和 103 开头的行(正则 需要加 r)

[root@chenleilei ~]# sed -nr ‘/^103|^105/p’ sed.log

103,$Alex,COO

105,$feixue,CIO

[排除] 排除一行

[root@chenleilei ~]# sed -n ‘1!p’ sed.log

102,$zhangyao,CTO

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

[排除] 排除多行

[root@chenleilei ~]# sed -n ‘1,2!p’ sed.log

103,$Alex,COO

104,$yy,CFO

105,$feixue,CIO

[排除不连续的行]

[root@chenleilei ~]# sed -nr ‘/102|104/!p’ sed.log

101,$oldboy,CEO

103,$Alex,COO

105,$feixue,CIO

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,565
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,413
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,186
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905