Linux之sed

1.sed简介

sed是Stream Editor(字符流编辑器)的缩写, 简称流编辑器。

sed是操作, 过滤和转换文本内容的强大工具

常用功能包括结合正则表达式对文件实现快速增删改查,其中查询的功能中最常用的两大功能是过滤(过滤指定字符串)、取行(取出指定行)。

2.sed执行流程

  1. 每次仅读取一行内容;
  2. 根据提供的规则命令匹配并修改数据。注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据;
  3. 将执行结果输出。

当一行数据匹配完成后,它会继续读取下一行数据,并重复这个过程,直到将文件中所有数据处理完毕。

3.sed 基本格式

[root@localhost ~]# sed [选项] [脚本命令] 文件名

4.sed常用选项

选项 含义
-e 它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项
-f 后跟保存了sed指令的文件
-i 直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改
-n 取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
-r 从头到尾匹配 r,支持扩展元字符,所以^(.*)$ 不支持扩展正则的话,那就^\(.*)$

 5.sed中的编辑命令

命令 含义
a-追加 向匹配行后面插入内容
i-插入 向匹配行前插入内容
c-更改 更改匹配行的内容,全部替换掉
y-更改 更改替换单个字符,范围行或者全局
d-删除 删除匹配的内容
s-替换 替换掉匹配的内容,配合g使用,g代表全局
p-打印 打印出匹配的内容,通常与-n选项和用
= 用来打印被匹配的行的行号
n 读取下一行,遇到n时会自动跳入下一行
r,w 读和写编辑命令,r用于将内容读入文件,w用于将匹配内容写入到文件

 6.sed 匹配范围

范围 含义
空地址 全文处理
单地址 指定文件某一行
/pattern/ 被模式匹配到的每一行
范围区间

10,20  :10到20行

10,+5  :第10行向下5行

/pattern1/,/pattern2/

步长

1~2 :表示1,3,5,7,9行

2~2  :表示2,4,6,8,10行 偶数行

7.sed 实例

7.1  测试实例文本 cat sed.txt

与高适薛据登慈恩寺浮
大雁塔的气势宛如平地涌出,孤傲高峻耸立好象直接天宫。
登上雁塔绝顶仿佛离开尘世,沿阶盘旋攀登有如升越太空。
高耸宏伟似乎压盖神州大地,峥嵘崔嵬简直胜过鬼斧神工。
四角挺拔顶天遮住太阳光辉,塔高七层紧紧地接连着苍穹。
站在塔顶鸟瞰指点翱翔飞鸟,俯身向下倾听阵阵怒吼狂风。
山连着山好比波涛汹涌起伏,奔走如百川归海来朝见帝京。
两行青槐夹着天子所行道路,宫阙楼台变得多么精巧玲珑。
悲凉秋色打从关西弥漫而来,苍苍茫茫已经布满秦关之中。
再看看长安城北汉代的五陵,历经万古千秋依然青青
清净寂来的佛理我完全领悟。行善施道素来是我做人信奉。
我发誓回去后行将辞官归隐,我觉得佛道的确能济世无穷。

7.2 查询文本第2行

[root@localhost sed]# sed -n '2p' sed.txt 
大雁塔的气势宛如平地涌出,孤傲高峻耸立好象直接天宫。
[root@localhost sed]# 

7.3  查询文本2至4行

[root@localhost sed]# sed -n '2,4p' sed.txt 
大雁塔的气势宛如平地涌出,孤傲高峻耸立好象直接天宫。
登上雁塔绝顶仿佛离开尘世,沿阶盘旋攀登有如升越太空。
高耸宏伟似乎压盖神州大地,峥嵘崔嵬简直胜过鬼斧神工。
[root@localhost sed]# 

7.4 查询第5行,+向下2行

[root@localhost sed]# sed -n '5,+2p' sed.txt 
四角挺拔顶天遮住太阳光辉,塔高七层紧紧地接连着苍穹。
站在塔顶鸟瞰指点翱翔飞鸟,俯身向下倾听阵阵怒吼狂风。
山连着山好比波涛汹涌起伏,奔走如百川归海来朝见帝京。
[root@localhost sed]# 

7.5  查询步长 ,及每次增长的数1~2,每次步长+2.

[root@localhost sed]# sed -n '1~2p' sed.txt 
与高适薛据登慈恩寺浮
登上雁塔绝顶仿佛离开尘世,沿阶盘旋攀登有如升越太空。
四角挺拔顶天遮住太阳光辉,塔高七层紧紧地接连着苍穹。
山连着山好比波涛汹涌起伏,奔走如百川归海来朝见帝京。
悲凉秋色打从关西弥漫而来,苍苍茫茫已经布满秦关之中。
清净寂来的佛理我完全领悟。行善施道素来是我做人信奉。
[root@localhost sed]# sed -n '2~2p' sed.txt 
大雁塔的气势宛如平地涌出,孤傲高峻耸立好象直接天宫。
高耸宏伟似乎压盖神州大地,峥嵘崔嵬简直胜过鬼斧神工。
站在塔顶鸟瞰指点翱翔飞鸟,俯身向下倾听阵阵怒吼狂风。
两行青槐夹着天子所行道路,宫阙楼台变得多么精巧玲珑。
再看看长安城北汉代的五陵,历经万古千秋依然青青
我发誓回去后行将辞官归隐,我觉得佛道的确能济世无穷。
[root@localhost sed]# sed -n '1~3p' sed.txt 
与高适薛据登慈恩寺浮
高耸宏伟似乎压盖神州大地,峥嵘崔嵬简直胜过鬼斧神工。
山连着山好比波涛汹涌起伏,奔走如百川归海来朝见帝京。
再看看长安城北汉代的五陵,历经万古千秋依然青青
[root@localhost sed]# 

7.6 匹配模式查询 /匹配字符串/

[root@localhost sed]# sed  -n  '/精巧玲珑/p' sed.txt 
两行青槐夹着天子所行道路,宫阙楼台变得多么精巧玲珑。
[root@localhost sed]# 

7.7 删除某行,或者范围行 '1d'或者'1,3d'

[root@localhost sed]# cat sed.txt 
与高适薛据登慈恩寺浮
大雁塔的气势宛如平地涌出,孤傲高峻耸立好象直接天宫。
登上雁塔绝顶仿佛离开尘世,沿阶盘旋攀登有如升越太空。
高耸宏伟似乎压盖神州大地,峥嵘崔嵬简直胜过鬼斧神工。
四角挺拔顶天遮住太阳光辉,塔高七层紧紧地接连着苍穹。
站在塔顶鸟瞰指点翱翔飞鸟,俯身向下倾听阵阵怒吼狂风。
山连着山好比波涛汹涌起伏,奔走如百川归海来朝见帝京。
两行青槐夹着天子所行道路,宫阙楼台变得多么精巧玲珑。
悲凉秋色打从关西弥漫而来,苍苍茫茫已经布满秦关之中。
再看看长安城北汉代的五陵,历经万古千秋依然青青
清净寂来的佛理我完全领悟。行善施道素来是我做人信奉。
我发誓回去后行将辞官归隐,我觉得佛道的确能济世无穷。
[root@localhost sed]# sed '1d' sed.txt 
大雁塔的气势宛如平地涌出,孤傲高峻耸立好象直接天宫。
登上雁塔绝顶仿佛离开尘世,沿阶盘旋攀登有如升越太空。
高耸宏伟似乎压盖神州大地,峥嵘崔嵬简直胜过鬼斧神工。
四角挺拔顶天遮住太阳光辉,塔高七层紧紧地接连着苍穹。
站在塔顶鸟瞰指点翱翔飞鸟,俯身向下倾听阵阵怒吼狂风。
山连着山好比波涛汹涌起伏,奔走如百川归海来朝见帝京。
两行青槐夹着天子所行道路,宫阙楼台变得多么精巧玲珑。
悲凉秋色打从关西弥漫而来,苍苍茫茫已经布满秦关之中。
再看看长安城北汉代的五陵,历经万古千秋依然青青
清净寂来的佛理我完全领悟。行善施道素来是我做人信奉。
我发誓回去后行将辞官归隐,我觉得佛道的确能济世无穷。
[root@localhost sed]# sed '1,3d' sed.txt 
高耸宏伟似乎压盖神州大地,峥嵘崔嵬简直胜过鬼斧神工。
四角挺拔顶天遮住太阳光辉,塔高七层紧紧地接连着苍穹。
站在塔顶鸟瞰指点翱翔飞鸟,俯身向下倾听阵阵怒吼狂风。
山连着山好比波涛汹涌起伏,奔走如百川归海来朝见帝京。
两行青槐夹着天子所行道路,宫阙楼台变得多么精巧玲珑。
悲凉秋色打从关西弥漫而来,苍苍茫茫已经布满秦关之中。
再看看长安城北汉代的五陵,历经万古千秋依然青青
清净寂来的佛理我完全领悟。行善施道素来是我做人信奉。
我发誓回去后行将辞官归隐,我觉得佛道的确能济世无穷。
[root@localhost sed]# 

7.8 删除含有"悲凉秋色"所在行 '/悲凉秋色/d'

[root@localhost sed]# sed '/悲凉秋色/d' sed.txt 
与高适薛据登慈恩寺浮
大雁塔的气势宛如平地涌出,孤傲高峻耸立好象直接天宫。
登上雁塔绝顶仿佛离开尘世,沿阶盘旋攀登有如升越太空。
高耸宏伟似乎压盖神州大地,峥嵘崔嵬简直胜过鬼斧神工。
四角挺拔顶天遮住太阳光辉,塔高七层紧紧地接连着苍穹。
站在塔顶鸟瞰指点翱翔飞鸟,俯身向下倾听阵阵怒吼狂风。
山连着山好比波涛汹涌起伏,奔走如百川归海来朝见帝京。
两行青槐夹着天子所行道路,宫阙楼台变得多么精巧玲珑。
再看看长安城北汉代的五陵,历经万古千秋依然青青
清净寂来的佛理我完全领悟。行善施道素来是我做人信奉。
我发誓回去后行将辞官归隐,我觉得佛道的确能济世无穷。
[root@localhost sed]# 

 7.9 删除第五行到最后一行 '5,$d'

[root@localhost sed]# sed '5,$d' sed.txt 
与高适薛据登慈恩寺浮
大雁塔的气势宛如平地涌出,孤傲高峻耸立好象直接天宫。
登上雁塔绝顶仿佛离开尘世,沿阶盘旋攀登有如升越太空。
高耸宏伟似乎压盖神州大地,峥嵘崔嵬简直胜过鬼斧神工。
[root@localhost sed]# 

 7.10 插入 i-插入匹配行前,a-插入匹配行后面

[root@localhost sed]# sed -e '1i好诗好诗' -e '$a好诗好诗' sed.txt 
好诗好诗
与高适薛据登慈恩寺浮
大雁塔的气势宛如平地涌出,孤傲高峻耸立好象直接天宫。
登上雁塔绝顶仿佛离开尘世,沿阶盘旋攀登有如升越太空。
高耸宏伟似乎压盖神州大地,峥嵘崔嵬简直胜过鬼斧神工。
四角挺拔顶天遮住太阳光辉,塔高七层紧紧地接连着苍穹。
站在塔顶鸟瞰指点翱翔飞鸟,俯身向下倾听阵阵怒吼狂风。
山连着山好比波涛汹涌起伏,奔走如百川归海来朝见帝京。
两行青槐夹着天子所行道路,宫阙楼台变得多么精巧玲珑。
悲凉秋色打从关西弥漫而来,苍苍茫茫已经布满秦关之中。
再看看长安城北汉代的五陵,历经万古千秋依然青青
清净寂来的佛理我完全领悟。行善施道素来是我做人信奉。
我发誓回去后行将辞官归隐,我觉得佛道的确能济世无穷。
好诗好诗
[root@localhost sed]# 

7.11  c-更改匹配行的内容

[root@localhost sed]# sed '/大雁/c/替换大雁这行/' sed.txt 
与高适薛据登慈恩寺浮
/替换大雁这行/
登上雁塔绝顶仿佛离开尘世,沿阶盘旋攀登有如升越太空。
高耸宏伟似乎压盖神州大地,峥嵘崔嵬简直胜过鬼斧神工。
四角挺拔顶天遮住太阳光辉,塔高七层紧紧地接连着苍穹。
站在塔顶鸟瞰指点翱翔飞鸟,俯身向下倾听阵阵怒吼狂风。
山连着山好比波涛汹涌起伏,奔走如百川归海来朝见帝京。
两行青槐夹着天子所行道路,宫阙楼台变得多么精巧玲珑。
悲凉秋色打从关西弥漫而来,苍苍茫茫已经布满秦关之中。
再看看长安城北汉代的五陵,历经万古千秋依然青青
清净寂来的佛理我完全领悟。行善施道素来是我做人信奉。
我发誓回去后行将辞官归隐,我觉得佛道的确能济世无穷。
[root@localhost sed]# 

 7.12 读取第二行

[root@localhost sed]# sed -n '2p' sed.txt 
大雁塔的气势宛如平地涌出,孤傲高峻耸立好象直接天宫。
[root@localhost sed]# 

 7.13 忽略大小写替换

[root@VM-4-13-centos sed]# cat daxiao.txt 
AaBcCc aabbcc
aAbBcC AAbbCc
AAbBCC AaBBCC
[root@VM-4-13-centos sed]# cat daxiao.txt |sed 's/aa/dd/i'
ddBcCc aabbcc
ddbBcC AAbbCc
ddbBCC AaBBCC
[root@VM-4-13-centos sed]# cat daxiao.txt |sed 's/aa/dd/ig'
ddBcCc ddbbcc
ddbBcC ddbbCc
ddbBCC ddBBCC

 

posted @ 2022-09-01 11:42  家乐福的搬砖日常  阅读(459)  评论(0编辑  收藏  举报