其他分享
首页 > 其他分享> > 文本处理sed

文本处理sed

作者:互联网


目录

sed简介

1、sed 是什么

  sed 全名为 stream editor,流编辑器,用程序的方式来编辑文本,功能相当的强大,可以在大多数操作系统中使用。

  sed 的出现作为 grep 的继任者,与vim等编辑器不同,sed 是一种非交互式编辑器(即用户不必参与编辑过程),它使用预先设定好的编辑指令对输入的文本进行编辑,完成之后再输出编辑结构。sed 基本上就是在玩正则模式匹配,所以,玩sed的人,正则表达式一般都比较强。

2、sed 工作原理

  sed 会一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,成为"模式空间",接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

sed基本命令

命令格式

语法:

sed [options] '[地址定界] command' file(s)

常用选项options

地址定界

默认情况下sed会对每一行内容进行匹配、处理、输出,某些情况不需要对处理的文本全部编辑,只需要其中的一部分,比如1-10行,偶数行,或者是包含"hello"字符串的行,这种情况下就需要我们去定位特定的行来处理,而不是全部内容,这里把这个定位指定的行叫做"定址"。

编辑命令command

用法演示

常用选项options演示

[root@localhost ~]# cat z
aaa
bbbb
ccc
AABBCCDD
[root@localhost ~]# sed '/aaa/p' z   #匹配到的行会打印一遍,不匹配的行也会打印
aaa
aaa
bbbb
ccc
AABBCCDD
[root@localhost ~]# sed -n '/aaa/p' z      #-n不显示没匹配的行
aaa
[root@localhost ~]# sed -e 's/a/A/' -e 's/b/B/' z    #-e多点编辑
Aaa
Bbbb
ccc
AABBCCDD
[root@localhost ~]# cat sed.txt 
s/A/a/g
[root@localhost ~]# sed -f sed.txt z      #-f使用文件处理
aaa
bbbb
ccc
aaBBCCDD

[root@localhost ~]# sed -i.bak 's/a/A/g' z   #-i直接对文件进行处理
[root@localhost ~]# cat z
AAA
bbbb
ccc
AABBCCDD
[root@localhost ~]# cat z.bak 
aaa
bbbb
ccc
AABBCCDD

地址界定演示

[root@localhost ~]# cat z
AAA
bbbb
ccc
AABBCCDD
[root@localhost ~]# sed -n 'p'  z      #不指定行,打印全文
AAA
bbbb
ccc
AABBCCDD
[root@localhost ~]# sed '2s/b/B/g' z       #替换第2行的b->B
AAA
BBBB
ccc
AABBCCDD
[root@localhost ~]# sed -n '/AA/p' z    #打印AA的行
AAA
AABBCCDD
[root@localhost ~]# sed -n '1,2p' z    #打印1-2行
AAA
bbbb
[root@localhost ~]# sed -n '/AAA/,/DD/p' z
AAA
bbbb
ccc
AABBCCDD
[root@localhost ~]# sed -n '2,/DD/p' z
bbbb
ccc
AABBCCDD
[root@localhost ~]# sed '2~2s/[bB]/Z/g' z  #将偶数行的b或A替换为Z
AAA
ZZZZ
ccc
AAZZCCDD

编辑命令command演示

[root@localhost ~]# cat z
AAA
bbbb
ccc
AABBCCDD
[root@localhost ~]# sed '2d' z      #删除第2行
AAA
ccc
AABBCCDD
[root@localhost ~]# sed -n '2p' z    #打印第2行
bbbb
[root@localhost ~]# sed '2a123' z    #在第2行后加123
AAA
bbbb
123
ccc
AABBCCDD
[root@localhost ~]# sed '1i123' z    #在第1行前加123
123
AAA
bbbb
ccc
AABBCCDD
[root@localhost ~]# sed '3c123\n456' z      #替换第3行内容
AAA
bbbb
123
456
AABBCCDD
[root@localhost ~]# sed -n '3w/root/z3' z  #保存第3行的内容到z3文件中
[root@localhost ~]# cat z3
ccc
[root@localhost ~]# sed '1r/root/z3' z     #读取z3的内容到第1行后
AAA
ccc
bbbb
ccc
AABBCCDD
[root@localhost ~]# sed  '=' z      #=打印行号
1
AAA
2
bbbb
3
ccc
4
AABBCCDD
[root@localhost ~]# sed -n '2!p' z    #打印除了第2行的内容
AAA
ccc
AABBCCDD
[root@localhost ~]# sed 's@[a-z]@\u&@g' z     #将全文的小写字母替换为大写字母
AAA
BBBB
CCC
AABBCCDD

sed高级编辑命令

选项:

1.一个案例+示意图演示

案例:倒序输出文本内容

[root@localhost ~]# cat num.txt 
one
two
three
[root@localhost ~]# sed '1!G;h;$!d' num.txt 
three
two
one

示意图如下:

[root@localhost ~]# cat z
1
2
11
22
111
222
#将匹配到的1复制到保持空间,并删除模式空间的1,再匹配2时,将保持空间的文本追加到匹配的2后面
[root@localhost ~]# sed '/1/{h;d};/2/{G}' z
2
1
22
11
222
111
[root@localhost ~]# cat c
hello world 1

hello world 2


hello world 3



hello world 4




happy
#将多个空行减少到一行
[root@localhost ~]# sed '/^$/{N;/^\n$/d;}' c
hello world 1

hello world 2
hello world 3

hello world 4
happy
[root@localhost ~]# sed '/^$/{N;/^\n$/D;}' c
hello world 1

hello world 2

hello world 3

hello world 4

happy
[root@localhost ~]#

标签:AAA,AABBCCDD,文本处理,sed,localhost,root,ccc
来源: https://www.cnblogs.com/z696/p/16698553.html