文本三剑客之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
相关文章
|
10月前
|
存储 Perl
sed编辑器
sed编辑器
50 0
|
8月前
|
缓存 BI Linux
《Linux操作系统编程》第九章 数据查找和筛选工具 : 了解流编辑器sed和报表生成器awk的简单使用
《Linux操作系统编程》第九章 数据查找和筛选工具 : 了解流编辑器sed和报表生成器awk的简单使用
60 0
|
9月前
|
存储 Shell Perl
shell编程之sed编辑器
shell编程之sed编辑器
50 0
|
10月前
|
Linux 开发工具 开发者
掌握文本编辑的艺术:深入了解Linux中的Vim编辑器
在Linux系统中,文本编辑是一项常见的任务。为了满足不同层次的用户需求,诞生了许多文本编辑器,其中Vim作为一个强大的编辑器,广受开发者和系统管理员的喜爱。本文将深入介绍Vim的基本概念、特点以及如何在Linux系统中使用它进行高效的文本编辑。
88 0
|
Linux Perl
【Linux进阶命令 03】sed (文本的流编辑器)
【Linux进阶命令 03】sed (文本的流编辑器)
Markdown (CSDN) MD编辑器(二)- 文本样式(更改字体、字体大小、字体颜色、加粗、斜体、高亮、删除线)
Markdown (CSDN) MD编辑器(二)- 文本样式(更改字体、字体大小、字体颜色、加粗、斜体、高亮、删除线)
924 0
Markdown (CSDN) MD编辑器(二)- 文本样式(更改字体、字体大小、字体颜色、加粗、斜体、高亮、删除线)
|
JavaScript 前端开发 Linux
【看表情包学Linux】软件包管理器 yum | Vim 编辑器介绍 | Vim 文本批量化操作 | 配置 Vim(二)
本章首先介绍 Linux 软件包管理器 yum,学习如何在 Linux 上安装和卸载软件。最后我们讲解一下 vim 编辑器,我采会用实际操作去讲解 vim 的文本操作。对于 vim 的这些操作按键,不需要死记,用的多了自然就会熟。默认的 vim 配置简陋不堪,没有代码提示、没有缩进甚至没有行号,但至少还是有语法高亮的。在这一章我们主要去学习 vim 的基础操作,对于 vim 的配置我打算放到下一章去讲。
215 1
【看表情包学Linux】软件包管理器 yum | Vim 编辑器介绍 | Vim 文本批量化操作 | 配置 Vim(二)
|
Linux 程序员 Shell
【看表情包学Linux】软件包管理器 yum | Vim 编辑器介绍 | Vim 文本批量化操作 | 配置 Vim(一)
💭 写在前面 本章首先介绍 Linux 软件包管理器 yum,学习如何在 Linux 上安装和卸载软件。最后我们讲解一下 vim 编辑器,我采会用实际操作去讲解 vim 的文本操作。对于 vim 的这些操作按键,不需要死记,用的多了自然就会熟。默认的 vim 配置简陋不堪,没有代码提示、没有缩进甚至没有行号,但至少还是有语法高亮的。在这一章我们主要去学习 vim 的基础操作,对于 vim 的配置我打算放到下一章去讲。
148 1
【看表情包学Linux】软件包管理器 yum | Vim 编辑器介绍 | Vim 文本批量化操作 | 配置 Vim(一)
|
1月前
|
存储 Linux 编译器
vim编辑器和gcc/g++编辑器的使用讲解
vim编辑器和gcc/g++编辑器的使用讲解
70 2
|
1月前
|
Linux 编译器 开发工具
Linux:详解(yum的使用、vim编辑器命令集合以及gcc/g++编译器的使用)
Linux:详解(yum的使用、vim编辑器命令集合以及gcc/g++编译器的使用)
140 1