当前位置:   article > 正文

linux中使用sed方法为什么没改,linux的sed(增删改查)使用方法

sed使用a追加行后回显显示成功,但实际文件未更改

sed的增删改查的基本操作

01:增(a)

2个sed命令,分别是:(这些操作都是在内存中进行的,所以不会 被写入到原文件中,如果需要修改原文件则需要用大 -i )

eg:修改原文件的内容。为了防止修改配置文件,一定要实现辈分或则用测试文件测试

sed -i '2a ppppppp' test.txt #在第二行之后添加数据,并写入到原文件

“a”:追加文本到指定行后,记忆方法:a的全拼是append,意思是追加。

“i“:插入文本到指定行前,记忆方法:i的全拼是insert,意思是插入。

[root@tom /]# cat test.txt

xxxxxxxxxxxx

mmmmmmmmmmmm

hhhhhhhhh

[root@tom/]# sed '2a ppppppp'test.txt #2a 代表在第二行之后进行 添加 操作

xxxxxxxxxxxx

mmmmmmmmmmmm #新增的内容

ppppppp

hhhhhhhhh

[root@tom/]# sed '2i 9999'test.txt    #2i 代表在第二行之前进行 插入 操作

xxxxxxxxxxxx9999        #新插入的内容mmmmmmmmmmmm

hhhhhhhhh

总结:插入i 在之前, a添加在之后

ps:单引号和双引号的用法

#单引号--变量$PATH会将文本内容原封不动插入,不会解释成路径

#双引号--变量$PATH被解析以后在当作文本进行插入

总结:

如果引号里面是普通字符串的话,你可以任意使用单引号或者双引号:

如果引号里面是变量或者带反引号的命令的话,你想要变量解析的结果或者命令执行的结果,那就使用双引号;你想要引号内的原样字符串,那就使用单引号。

152d6338f2d02c88cf205e6c3027e33b.png

02:添加多行文本到一个文件中并写入到原文件中

[root@tom /]# cat test.txt

xxxxxxxxxxxx

mmmmmmmmmmmm

kkkkkkkkkkkk

[root@tom /]# sed -i "3a qq\nwww\neee\nrrr\nttt\nyyy\nuuu" test.txt # -i 代表写入原文件, \n 代表换行,一定不能忘记写 \n 不然不会起作用

[root@tom /]# cat test.txt

xxxxxxxxxxxx

mmmmmmmmmmmm

kkkkkkkkkkkk

qq

www

eee

rrr

ttt

yyy

uuu

03:删除

1.删除单行文本(删除第三行文本)

[root@tom /]# sed "3d" test.txt #3d 数字代表第几行,d代表删除

xxxxxxxxxxxx

mmmmmmmmmmmm

qq

www

eee

rrr

ttt

yyy

uuu

2.删除第2行到第三行的数据

[root@tom /]#cat test.txt

xxxxxxxxxxxx

mmmmmmmmmmmm

kkkkkkkkkkkk

qq

www

eee

rrr

ttt

yyy

uuu

[root@tom/]#sed "2,3d" test.txt     #删除第二行到第三行的数据(包含这首位这两个)

xxxxxxxxxxxx

qq

www

eee

rrr

ttt

yyy

uuu

3.正则匹配删除

在sed软件中,使用正则的格式和awk一样,使用2个”/“包含指定的正则表达式,即“/正则表达式/”。

"/k/d"有哪一行有k则删除这一行。

[root@tom /]#cat test.txt

xxxxxxxxxxxx

mmmmmmmmmmmm

kkkkkkkkkkkk

qq

www

eee

rrr

ttt

yyy

uuu

[root@tom/]#sed "/k/d" test.txt #删除包含k的这一行内容

xxxxxxxxxxxx

mmmmmmmmmmmm

qq

www

eee

rrr

ttt

yyy

uuu

正则表达式形式的多行删除,也是以逗号分隔2个地址,最后结果是删除包含“k”的行到包含“x”的行

[root@tom /]#cat test.txt

xxxxxxxxxxxx

mmmmmmmmmmmm

kkkkkkkkkkkk

qq

www

eee

rrr

ttt

yyy

uuu

[root@tom/]#sed "/m/,/y/d" test.txt #删除包含m到包含y的行

xxxxxxxxxxxx

uuu

正则表达式我们知道“$”代表行尾,在sed中“$”代表文件的最后一行。

例子:

[root@tom /]#sed "/3,$/d" test.txt

xxxxxxxxxxxx

mmmmmmmmmmmm

kkkkkkkkkkkk

qq

www

eee

rrr

ttt

yyy

uuu

[root@tom/]#sed "3,\$d" test.txt

xxxxxxxxxxxx

mmmmmmmmmmmm

[root@tom/]#

4:sed文本内容替换

“s”:单独使用-->将每一行中第一处匹配的字符串进行替换==>sed命令

“g”:每一行进行全部替换-->sed命令s的替换标志之一(全局替换),非sed命令。

“-i”:修改文件内容-->sed软件的选项,注意和sed命令i区别。

sed软件替换模型  ===>  sed -i 's#目标内容#替换内容#g'

定界符/或#,第一个和第二个之间的就是被替换的内容,第二个和第三个之间的就是替换后的内容。建议使用#作为定界符。

s#目标内容#替换内容#g ,“目标内容”能用正则表达式,但替换内容不能用,必须是具体的。因为替换内容使用正则的话会让sed软件无所适从,它不知道你要替换什么内容。

默认sed软件是对模式空间(内存中的数据)操作,而-i选项会更改磁盘上的文件内容。

[root@tom /]#cat test.txt

xxxxxxxxxxxx

mmmmmmmmmmmm

kkkkkkkkkkkk

qq

www

eee

rrr

ttt

yyy

uuu

[root@tom/]#sed "s#m#b#g" test.txt #将文本中的m全部替换成b, s代表替换的意思,g代表全部

xxxxxxxxxxxx

bbbbbbbbbbbb

kkkkkkkkkkkk

qq

www

eee

rrr

ttt

yyy

uuu

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/322831
推荐阅读
相关标签
  

闽ICP备14008679号