Linux Sed 命令的总结

前言:

sed是一种流编编器,它是文本处理中非常中的工具,能够完美的配合正则表达式便用,功物能不同凡响。

处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”( oattern space),接看用sed命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。

接着理下一行,这样不断重复,直到文件末。文件内容没有改改变,除非使用了写入的命令,将内容更新。

定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。

sed 的功能很强大在 脚本中 获取文件的打印,追加,替换 ,删除

我举几个我常用的几个方法场景

 

使用方法:

打印 输出:

打印对应文件第三行

sed -n '3p' /var/log/yum.log

只查看文件的第3行到第9行

sed -n '3,9p' /var/log/yum.log

过滤特定字符串,显示正行内容

sed -n  '/root/p' yum.log

显示包含"hhh"的行到包含"omc"的行之间的行

sed -n '/hhh/,/omc/p' yum.log

仅仅显示匹配字符串的行号

 sed -n '/root/p' yum.log

 

给文件追加文件,写入文件:

sed -i -e '1i happy' -e '$a new year' yum.log

这里需要分析一下 首先 -i 的含义是说是插入的模式 -e 代表多编辑意思,就是说同时修改不同位置文件。 “ 1 i ” 1 的意思代表第一行 i 表示插入,他会插入第一行位置,如果是a 他会插入在第一行的末尾 , ‘ $ a’ $是正则表达式中的一种,表示所有,这个请小伙伴补充一下,正则的知识

在文件第一行和第四行的每行下面添加hahaha

sed '1,4i hahaha' yum.log

有人会想在文件的倒数第二行添加内容实现的方法

sed '$i 你要添加的内容'  Group.xml

替换 :

sed -i 's/root/world/g' yum.log

把 文件中的 root 替换 为 world /g是全局的意思 s 查找的意思

sed -i '5,10 s/root/FTL/g' yum.log

替换 5 到 10 行的 root 变为ftl

 

删除:

删除 3 行到9 行

sed  -i '3,9d' /var/log/yum.log

删除包含"hhh"的行到包含"omc"的行之间的行

sed -i '/hhh/,/omc/d' yum.log

 

详细参数

sed命令功能

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

命令  功能

a\  在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行

 

c\  用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行

 

i\  在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行

 

d   删除行

 

h   把模式空间里的内容复制到暂存缓冲区

 

H   把模式空间里的内容追加到暂存缓冲区

 

g   把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容

 

G   把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面

 

l   列出非打印字符

 

p   打印行

 

n   读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理

 

q   结束或退出sed

 

r   从文件中读取输入行

 

!   对所选行以外的所有行应用命令

 

s   用一个字符串替换另一个

 

g   在行内进行全局替换

 

w   将所选的行写入文件

 

x   交换暂存缓冲区与模式空间的内容

 

y   将字符替换为另一字符(不能对正则表达式使用y命令)

sed常见命令参数

1

2

3

4

5

6

7

p==print

d:delete

=:打印匹配行的行号

-n 取消默认的完整输出,只要需要的 

-e 允许多项编辑

-i 修改文件内容

-r 不需要转义

1

注意:& 符号在sed命令中代表上次匹配的结果

 

sed 中可能遇到的坑 

字符转义问题:

1 .   替换 [ ] 时 

你想把中括号替换,它是一个不折不扣的叛徒,它需要转义才行 例:

sed 's/\[/aaa/g'

2. 替换(){}时,则不需要

3   记得字符转义

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章