第七章 流编辑器sed

第七章 流编辑器sed

sed是一个脚本型,非交互式的编辑器。sed没有交互式的编辑界面,光标移动以及庞大的快捷键功能。

1,工作原理

1,sed一次处理一行内容。处理时,把当前的行存储在临时缓存区(模式空间)中,接着用sed命令处理缓冲区中的内容,处理完成后,再把缓冲区的内容输出到屏幕。如此周而复始。

2,sed有两个内存缓冲区,分别为模式空间和保持空间(暂存缓冲区)

3,sed首先把第一行的内容装入模式空间,处理后输出到屏幕;然后继续把第二行装入模式空间(替换掉模式空间第一行的内容),再进行处理。

image.png

2,语法格式及特点

sed从文件中读取数据,如果没有输入文件,则默认对标准输入进程数据进行处理。

sed可以将数据进行替换,删除,新增,选取特定行等功能。

语法格式

sed		[options]   command  file1  file2
或
sed		[options]	-f	scriptfile

特点

(1)非交互,基于模式匹配的过滤及修改文本。
(2)逐行处理,太大的文件使用sed会显得格外有优势。
(3)可实现对文本的输出、删除、替换、复制、剪切、导入、导出等各种编辑。
(4)脚本化,在Shell脚本编程中使用sed比vim方便。

3,用法

image.png

image.png

image.png

image.png

4,支持正则表达式

1,正则表达式是扩在斜杠间的模式,用于查找和替换

#基本元字符
^  $  . *  [] [^]  \<\>	  \(\)  \{\}

#扩展元字符
?  +  {}  |  ()
1#取出/etc/passed文件前十行
[root@localhost ~]# head /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# head /etc/passwd > passwd

2#打印password(由于sed选项为空)
[root@localhost ~]# sed '' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

3#删除文件的第四行
[root@localhost ~]# sed '4d' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

4#加p打印,(由于sed默认会输出处理后每一行的内容,又使用p命令,所以会打印两次)
[root@localhost ~]# sed 'p' passwd
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
#取消sed的默认打印,使用-n功能,屏蔽sed程序自动输出
[root@localhost ~]# sed -rn 'p' passwd

注意:在操作时,如果不指定操作范围,默认是对文件所有行进行操作

5,案例实战

#sed的替换命令
格式:s/原内容/新内容/标示

s:为替代命令
g:表示对模式空间的所有匹配进行全局更改
p:表示打印模式空间的内容
d:表示删除指令
r:支持正则表达式
a:追加在后面
i:追加在前面


地址用于决定对那些进行编辑。地址的形式可以是数字,正则表达式或两者的结合。
如果没有指定地址,sed将处理输入文件的所有行
1#在文件passwd中搜索root并替换为alice
[root@localhost ~]# sed -r 's/root/alice/' passwd	(没有g只替换一个)
alice:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/alice:/sbin/nologin

2#sed处理输入文件中的所有行
[root@localhost ~]# sed -r '3d' passwd		#删除第三行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

#删除root的行
[root@localhost ~]# sed -r '/root/d' passwd

#从root的行开始删除到第五行
[root@localhost ~]# sed -r '/root/,5d' passwd

#以bin开头的行删除到第五行
[root@localhost ~]# cat -n passwd		#显示行号
[root@localhost ~]# sed -r '/^bin/,5d' passwd

#以bin开头,从root开始再加5行删除
[root@localhost ~]# sed -r '/^bin/,+5d' passwd

#加上!表示非,除root以外的行删除
[root@localhost ~]# sed -r '/root/!d' passwd


3#删除所有奇数行,从第一行开始每隔两行删除
[root@localhost ~]# sed -r '1~2d' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin

#删除所有偶数行,从第一行开始每隔两行删除
[root@localhost ~]# sed -r '2~2d' passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

4#在指定行前面加#号
[root@localhost ~]# sed -r '1,5s/(.*)/#\1/' passwd
#root:x:0:0:root:/root:/bin/bash
#bin:x:1:1:bin:/bin:/sbin/nologin
#daemon:x:2:2:daemon:/sbin:/sbin/nologin
#adm:x:3:4:adm:/var/adm:/sbin/nologin
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

注:\1 :表示前面第一个左括号所表示的内容 ,\2表示前面第二个左括号中表示的内容,依次类推

5#写入保存命令w,表示将模式空间的内容写道文件file中。把带root的行保存到/tp/1.txt文件中。
[root@localhost ~]# sed -r '/root/w /tmp/1.txt' passwd
[root@localhost ~]# cat /tmp/1.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

6#追加命令a,a后面的内容追加到一个文件中。
[root@localhost ~]# sed -r '2a\11111111' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
11111111
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

#i命令表示追加在前面
[root@localhost ~]# sed -r '2i\22222222' passwd
root:x:0:0:root:/root:/bin/bash
22222222
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

相关推荐

  1. shell 编辑器 sed

    2024-03-25 09:18:02       41 阅读
  2. Sed编辑器总结

    2024-03-25 09:18:02       29 阅读
  3. linux常用命令-sed(编辑器)

    2024-03-25 09:18:02       60 阅读
  4. linux三剑客之编辑器sed

    2024-03-25 09:18:02       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-25 09:18:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-25 09:18:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-25 09:18:02       82 阅读
  4. Python语言-面向对象

    2024-03-25 09:18:02       91 阅读

热门阅读

  1. 开源GPGPU

    2024-03-25 09:18:02       35 阅读
  2. 前端并发控制

    2024-03-25 09:18:02       38 阅读
  3. 前端开发中手机端相关知识点

    2024-03-25 09:18:02       31 阅读
  4. Windows + RTX4090驱动,CUDA安装

    2024-03-25 09:18:02       50 阅读
  5. 深入理解DBC文件:汽车行业的数据通信蓝图

    2024-03-25 09:18:02       37 阅读
  6. Simulink学习教程分享

    2024-03-25 09:18:02       48 阅读
  7. 滴滴基于 Clickhouse 构建新一代日志存储系统

    2024-03-25 09:18:02       41 阅读
  8. 精读《如何做好 CodeReview》

    2024-03-25 09:18:02       40 阅读
  9. 复习Day2_

    2024-03-25 09:18:02       43 阅读
  10. TCP重传机制详解——03DSACK

    2024-03-25 09:18:02       37 阅读
  11. 【boost_search搜索引擎】2.正排索引和倒排索引

    2024-03-25 09:18:02       37 阅读
  12. P1873 [COCI 2011/2012 #5] EKO / 砍树

    2024-03-25 09:18:02       38 阅读