文本三剑客之sed编辑器(下)

简介: 文本三剑客:都是按行读取后处理。grep 过滤行内容。awk 过滤字段。sed 过滤行内容;修改行内容。


6.3 单字符替换 y

使用y,是对单个字符进行替换,每个字符需要一一对应,不是整体替换。前后字符串长度需要一致,不然会报错。

示例:

遇到n替换成2,遇到o替换成5。

[root@yuji ~]# sed 'y/no/25/' ff.txt      //遇到n替换成2,遇到o替换成5
 52e
 tw5
 three
 f5ur
 five
 six
 seve2
 eight
 2i2e
 te2
 [root@yuji ~]# sed 'y/no/255/' ff.txt
 sed:-e 表达式 #1,字符 9:“y”命令的字符串长度不同
复制代码


网络异常,图片无法展示
|


7 sed 增加a i r


a:在行后添加内容

i:在行前插入内容

r:在行后读入文件内容

7.1 在行后添加内容a

示例1:在第一行下方添加一行内容

[root@yuji ~]# sed '1a 22' ff.txt      //在第一行下方添加一行内容
 one
 22222
 two
 three
 four
 five
 six
 seven
 eight
 nine
 ten
复制代码


网络异常,图片无法展示
|


示例2:在第1~3行,每行下方添加一行内容

[root@yuji ~]# sed '1,3a 22' ff.txt     //在第1~3行,每行下方添加一行内容
 one
 22
 two
 22
 three
 22
 four
 five
 six
 seven
 eight
 nine
 ten
复制代码


网络异常,图片无法展示
|


示例3:在最后一行的下方,添加一行内容

[root@yuji ~]# sed '$a 22' ff.txt     //在最后一行的下方,添加一行内容
 one
 two
 three
 four
 five
 six
 seven
 eight
 nine
 ten
 22
复制代码


网络异常,图片无法展示
|


示例4:在第一行下方添加3行内容

[root@yuji ~]# sed '1a 22\n33\n44' ff.txt    //在第一行下方添加3行内容
 one
 22
 33
 44
 two
 three
 four
 five
 six
 seven
 eight
 nine
 ten
复制代码


网络异常,图片无法展示
|


7.2 在行前插入内容 i

示例:

[root@yuji ~]# sed '1i 77' ff.txt        //在第一行的上方,添加一行内容
 77
 one
 two
 three
 four
 five
 six
 seven
 eight
 nine
 ten
 [root@yuji ~]# sed '1,3i 77' ff.txt      //在第1~3行每行的上方,添加一行内容
 77
 one
 77
 two
 77
 three
 four
 five
 six
 seven
 eight
 nine
 ten
复制代码


网络异常,图片无法展示
|


7.3 在行后读入文件内容 r

示例:

[root@yuji ~]# cat hh.txt
 hello world
 [root@yuji ~]# sed '6r hh.txt' ff.txt    //在第6行下方读入hh.txt文件内容
 one
 two
 three
 four
 five
 six
 hello world
 seven
 eight
 nine
 ten
复制代码


网络异常,图片无法展示
|


8 sed 复制粘贴

比较vi/vim编辑器和 sed编辑器:

#vi//vim编辑器:
 命令模式
 dd p  剪切 粘贴
 yy p  复制 粘贴
 末行模式
 :1,3 co 10  复制 粘贴(将第1~3行复制粘贴到第10行下方)
 :1,3 m 10   剪切 粘贴(将第1~3行剪切到第10行下方)
 #sed命令:
 H复制、d删除、G粘贴到指定行下方
复制代码


示例1:剪切粘贴

H复制,d删除,通过”复制后删除“来达到剪切的效果。

[root@yuji ~]# sed '1,3 {H;d};$G' ff.txt     //将第1~3行剪切粘贴到最后一行下方
 four
 five
 six
 seven
 eight
 nine
 ten
 one
 two
 three
 [root@yuji ~]# sed '1,3 {H;d};5G' ff.txt     //将第1~3行剪切粘贴到第5行后面
 four
 five
 one
 two
 three
 six
 seven
 eight
 nine
 ten
复制代码


网络异常,图片无法展示
|


示例2:复制粘贴

将1到3行复制粘贴到最后一行后面。(注意中间会多出一行空行)

[root@yuji ~]# sed '1,3 H;$G' ff.txt    //将1到3行复制粘贴到最后一行后面
 one
 two
 three
 four
 five
 six
 seven
 eight
 nine
 ten
 one
 two
 three
复制代码


网络异常,图片无法展示
|


9 文件内容中的字符串进行互换

示例1:

#将2个字符串交换位置
 [root@yuji ~]# echo 111222333
 111222333
 [root@yuji ~]# echo 111222333|sed -r 's/(111)(222)/\2\1/'
 222111333
 #将3个字符串交换位置
 [root@yuji ~]# echo 111222333|sed -r 's/(111)(222)(333)/\3\2\1/'
 333222111
 #将第一个字符和最后一个字符进行互换
 [root@yuji ~]# echo 111222333|sed -r 's/^(.)(.*)(.)$/\3\2\1/'
 311222331
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


示例2:

将abc123修改成123abc、321cba。

[root@yuji ~]# echo abc123| sed -r 's/(abc)(123)/\2\1/'
 123abc
 [root@yuji ~]# echo abc123| sed -r 's/(.)(.)(.)(.)(.)(.)/\6\5\4\3\2\1/'
 321cba
 [root@localhost ~]# echo abc123| sed -r 's/(a)(b)(c)(1)(2)(3)/\6\5\4\3\2\1/'
 321cba
复制代码


网络异常,图片无法展示
|


10 总结

1、sed的核心功能:增删改查(可配合正则表达式)

查: p
 删: d
 改: s(字符串替换)、c(整行替换)、y(对应字符进行替换,效果类似tr命令)
 增: i(在行前插入内容)、a(在行后添加内容)、r(在行后读入文件的内容)
 复制粘贴:H(复制)、d(删除)、G(粘贴到指定行下方)
复制代码


2、sed对指定行操作:

  • 以数字形式表示行区间
  • 用字符串来过滤行

3、 sed -i 可以直接修改文件内容,操作前建议先验证命令和备份目标文件 。

4、删除空行的三种方法:

grep -v "^$"  file.txt        //过滤出非空行
 cat file.txt |tr -s "\n"      //压缩换行符
 sed  '/^$/d'  file.txt        //删除空行
复制代码


5、查找替换:

行范围 s/旧字符串/新字符串/替换标记
 s/旧字符串/新字符串/2  #代表对每行第二个匹配到的字符串进行替换
                  g  #代表对每行所有能匹配到的字符进行替换
                  p  #可以结合-n 选项只打印替换的行内容
                  w  #可以把替换的行内容保存到指定的文件中
 n,m s/旧字符串/新字符串/       #指定第n行到第m行,将旧字符串替换成新字符串
 /字符串+正则/ s/旧字符串/新字符串/    #过滤出想要的行,之后进行替换
 s/^/添加的字符/    #行首添加内容
 s/$/添加的字符/    #行尾添加内容
 sed -f 文件    #指定脚本文件来执行,可以在文件中定义多条操作规则
 sed指定字符串的分隔符,就看s后面跟的字符,3个分隔符要保持一致,如果遇到跟分隔符相同的字符则需要使用\来转义。
 例如:s#/bin/bash#/sbin/nologin#g
相关文章
|
3月前
|
数据采集 运维 监控
运维笔记:流编辑器sed命令用法解析
运维笔记:流编辑器sed命令用法解析
57 5
|
5月前
|
开发工具
Vim 编辑器:高效文本编辑的瑞士军刀
**Vim 概览:** Vim 是一个功能丰富的文本编辑器,以其高度可定制性著称。文章介绍了 Vim 的高效使用技巧,包括快捷打开文件、命令行模式下的常用命令、查找与替换、删除和复制文本。还讨论了配置 `.vimrc` 文件以自定义设置,如改变 leader 键、设置缩进和高亮,并展示了安装插件如 vim-airline 和 vim-snazzy 的方法。通过这些技巧,用户能提升 Vim 使用效率。
67 5
|
4月前
|
前端开发 JavaScript Java
文本----简单编写文章的方法(中),后端接口的编写,自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑,想写好一个项目,先分析一下需求,再理一下实现思路,再搞几层,配好参数校验,lomb
文本----简单编写文章的方法(中),后端接口的编写,自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑,想写好一个项目,先分析一下需求,再理一下实现思路,再搞几层,配好参数校验,lomb
|
4月前
|
JavaScript
文本----简单编写文章的方法(上),自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑
文本----简单编写文章的方法(上),自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑
文本---富文本编辑器------Vue3使用富文本编辑器,Quill,全局样式和组件和样式的写法
文本---富文本编辑器------Vue3使用富文本编辑器,Quill,全局样式和组件和样式的写法
|
存储 Perl
sed编辑器
sed编辑器
72 0
|
缓存 BI Linux
《Linux操作系统编程》第九章 数据查找和筛选工具 : 了解流编辑器sed和报表生成器awk的简单使用
《Linux操作系统编程》第九章 数据查找和筛选工具 : 了解流编辑器sed和报表生成器awk的简单使用
84 0
|
存储 Shell Perl
shell编程之sed编辑器
shell编程之sed编辑器
73 0
|
Linux 开发工具 开发者
掌握文本编辑的艺术:深入了解Linux中的Vim编辑器
在Linux系统中,文本编辑是一项常见的任务。为了满足不同层次的用户需求,诞生了许多文本编辑器,其中Vim作为一个强大的编辑器,广受开发者和系统管理员的喜爱。本文将深入介绍Vim的基本概念、特点以及如何在Linux系统中使用它进行高效的文本编辑。
133 0
|
Linux Perl
【Linux进阶命令 03】sed (文本的流编辑器)
【Linux进阶命令 03】sed (文本的流编辑器)