Linux之sed
1.sed简介
sed是Stream Editor(字符流编辑器)的缩写, 简称流编辑器。
sed是操作, 过滤和转换文本内容的强大工具
常用功能包括结合正则表达式对文件实现快速增删改查,其中查询的功能中最常用的两大功能是过滤(过滤指定字符串)、取行(取出指定行)。
2.sed执行流程
- 每次仅读取一行内容;
- 根据提供的规则命令匹配并修改数据。注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据;
- 将执行结果输出。
当一行数据匹配完成后,它会继续读取下一行数据,并重复这个过程,直到将文件中所有数据处理完毕。
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