18.文本处理命令sed

目录

1.sed命令

2.行数据操作

3.字符串替换:


1.sed命令

sed主要是用来将数据进行选取,替换,删除,新增的命令。sed通过一次仅读取一行内容来对某些指令进行处理后输出。首先sed通过文件或管道读取文件内容,但sed默认并不输出直接修改源文件,而是将读入的内容复制到缓冲区域中,称之为模式空间。

Linux sed 命令是利用脚本来处理文本文件。

sed 可依照脚本的指令来处理、编辑文本文件。

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等

其语法如下:

Sed  [选项]  ‘[动作]’  文件名

选项:

-n       一般sed命令会把所有数据都输出到屏幕,如果加入此选项,则只会把经过sed命令处理的行输出到屏幕。

-e       允许对输入数据应用多条sed命令编辑。

-f       脚本文件名 从sed脚本中读入sed操作。和awk命令的-f非常相似。

-r       在sed中支持扩展正则表达式。

-i       用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出动作。

a        追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用\代表数据未完结。

c        行替换,用c后面的字符串替换原数据行。替换多行时,除最后一行外,每行末尾需要用\代表数据未完结。

i        插入,在当前行前插入一行或多行。插入多行时,除最后一行外,每行末尾需要用\代表数据为完结。

d        删除,删除指定的行。

p        打印,输出指定的行。

s        字符串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字串/新字串/g”(和vim中替换格式类 似)

2.行数据操作

[root@localhost ~]# sed -n '2p' cj.txt

#添加-n选项,只输出cj.txt中的第二行

[root@localhost ~]# sed '1,3d' cj.txt

#删除第一行到第三行的数据。但是文件本身并没有进行删除。加-i修改内容

[root@localhost ~]# sed '4a hello' cj.txt

#在第四行后加入hello。

#如果是想追加或插入多行数据,除最后一行外,每行的末尾都要加入“\”代表数据未完结。

[root@localhost ~]# sed -n '2i hello \

#还可以加入-n选项,只查看sed命令的操作

数据替换:

[root@localhost ~]# sed -i '3c 替换内容' cj.txt

#替换第三行的内容 

3.字符串替换:

“c”动作是进行整行替换的,如果仅仅想替换行中的部分数据,就要使用“s”动作了。

s动作的格式是:

sed ‘s/旧字串/新字串/g’ 文件名

[root@localhost ~]# sed '4s/89.1233322/90/g' cj.txt

#在第四行中,把89...换成90。

如果要修改的字符串是唯一的,那么可以不指定行号。但如果一个文件中存在多个相同字符的时候,不执行行号,就会替换所有旧字符为新字符。

加入g是表示所有"旧字符串"替换成"新字符串"。如果不加入g那么会替换每行第一个查找到的"旧字符串",也就是说如果一行内出现多个"旧字符串"只替换第一个,其余不替换。

g可以用数字代替表示替换某行内找到的第几个"旧字符串"。  

[root@bogon ~]# sed '5s/lod/new/2' ./test.txt

#表示替换第五行中出现的第二个old为new。

替换扩展:

[root@localhost ~]# sed '/SELINUX/ s/enforcing/xxx/g' /etc/selinux/config

#替换指定文件中含有SELINUX行中的enforcing字符串为xxx。

[root@localhost ~]# sed '/SELINUX/ !s/enforcing/xxx/g' /etc/selinux/config

#替换指定文件中所有enforcing为xxx但是不包括含有SELINUX的行。

[root@localhost ~]# sed '/root/,/swap/ s/xfs/ext4/g' /etc/fstab

#从含有root的行开始到含有swap的字符串结束。匹配结果中带有xfs的字符串全部替换成ext4。使用行内字符串确定替换字符串的范围。

[root@localhost ~]# sed '2s/^/#/g' cj.txt

#将第二行的内容进行注释

[root@localhost ~]# sed '1,3s/^/#/g' cj.txt

#指定范围1-3行加#注释。

-e选项

可以同时执行多个sed动作,当然如果只执行一个动作也是可以使用-e选项的,但没什么意义。还要注意,多个动作之间要用;或回车分割。

[root@localhost ~]# sed -e 's/zhaosan//g

> s/wangwu//g' cj.txt

猜你喜欢

转载自blog.csdn.net/weixin_46659843/article/details/124034652