0
点赞
收藏
分享

微信扫一扫

Redis可以用作分布式共享session的解决方案

汤姆torn 03-28 13:01 阅读 1
编辑器

第七章 流编辑器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
举报

相关推荐

0 条评论