当前位置:   article > 正文

sed语句的基本命令及用法_sed -i命令详解

sed -i命令详解

sed语句的基本命令及用法

一、在 sed命令中,常用的选项包括:

​ -e:允许多个编辑命令,多个编辑命令之间使用分号 ;`分隔。
​ -n:禁止自动打印模式空间的内容,只有经过 p 命令显式打印的内容才会输出。
​ -i:直接在源文件上进行修改,而不是将结果输出到标准输出。需要注意的是,-i 选项会直接修改源文件,慎用。
​ -r:或 --regexp-extended:启用扩展的正则表达式语法,可以使用更多的元字符和特殊字符。
​ -f:从指定的文件中读取编辑命令,而不是在命令行中指定。
​ -s:或 --separate:将输入的多个文件视为独立的文件,分别处理,而不是将它们合并为一个流进行处理。

二、命令及用法

1.替换

命令s:替换掉匹配的内容,通常可以搭配正则表达式

[root@controller ~]# cat bb 
hello world mhy
[root@controller ~]# 
[root@controller ~]# sed -ri 's/mhy/op/' bb         
[root@controller ~]# 
[root@controller ~]# cat bb 
hello world op
[root@controller ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

文本中的mhy已经成功替换成了op

命令s配合字符&使用

[root@controller ~]# sed -ri 's/op/& mhy/' bb           
[root@controller ~]# 
[root@controller ~]# cat bb
hello world op mhy
[root@controller ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5

&字符替换的是op那一行的内容,并不是hello world op中的某一个内容.

2.删除

命令d:用于删除匹配到的文本行。

[root@controller ~]# cat aa
11111111
22222222
33333333
[root@controller ~]# 
[root@controller ~]# sed '1d' aa
22222222
33333333
[root@controller ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

执行后的效果显示删除了第一行,其实并没有删除因为sed后面没有带上-i

删除匹配到的那一行

[root@controller ~]# cat aa
11111111
22222222
33333333
[root@controller ~]# 
[root@controller ~]# sed -ri '/^2/d' aa
[root@controller ~]# 
[root@controller ~]# cat aa
11111111
33333333
[root@controller ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

sed后面带上-i后,匹配到以2开头的那一行已经删除,可以先用-r查看一下执行效果再确认是否删除。

3.追加

命令a:向匹配行后面插入内容,会在匹配行的下一行输出

[root@controller ~]# cat aa
11111111
33333333
44444444
55555555
[root@controller ~]# 
[root@controller ~]# 
[root@controller ~]# sed -ri '1ahello world' aa
[root@controller ~]# cat aa
11111111
hello world
33333333
44444444
55555555
[root@controller ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在第一行的下面一行已经将hello world追加成功,也可以在里面追加空格但需要在空格前面加上 \ 进行转义,否则无法追加。

4.插入

命令i:向匹配行前插入内容,会在匹配行的上一行输出

[root@controller ~]# sed -ri '/^4/i\     hello world' aa
[root@controller ~]# 
[root@controller ~]# cat aa
11111111
hello world
33333333
     hello world
44444444
55555555
[root@controller ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

匹配到4开头的那一行的前面一行已经成功加入了空格和内容,与命令a的用法相似。

5.更改

命令c:更改匹配行的内容

[root@controller ~]# cat aa
11111111
hello world
33333333
     hello world
44444444
55555555
[root@controller ~]# 
[root@controller ~]# sed -ri '4chello' aa
[root@controller ~]# 
[root@controller ~]# cat aa
11111111
hello world
33333333
hello
44444444
55555555
[root@controller ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

第二个hello world那一行已经更改成hello,并且前面的空格也一并更改了。

6.转换

命令y:命令会将文本中匹配到的字符按照对应的位置进行替换

[root@controller ~]# cat bb
hello world op mhy
[root@controller ~]# 
[root@controller ~]# sed -ri 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' bb
[root@controller ~]# 
[root@controller ~]# cat bb
HELLO WORLD OP MHY
[root@controller ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

文本中的小写字母全部转换成大写字母,也可以将单个字母的大小写进行转换.

7.打印

命令p:打印出匹配的内容,通常与-n选项和用

[root@controller ~]# cat aa
11111111
hello world
33333333
hello
44444444
55555555
[root@controller ~]# 
[root@controller ~]# sed -n '/hello/p' aa
hello world
hello
[root@controller ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

由于使用了-n只将匹配到的内容打印了出来,没有使用默认的打印功能。

8.打印行号

命令=:打印出文本中每一行的行号

[root@controller ~]# sed '=' aa
1
11111111
2
hello world
3
33333333
4
hello
5
44444444
6
55555555
[root@controller ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

同样可以将匹配到的行的行数打印出来

[root@controller ~]# sed '/^hello/=' aa
11111111
2
hello world
33333333
4
hello
44444444
55555555
[root@controller ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
9.下一步

命令n:表示下一行,可以搭配命令d使用将匹配到的空行删除

[root@controller ~]# cat aa
11111111
hello world

33333333
[root@controller ~]# 
[root@controller ~]# sed -ri world/{n;/^$/d}' aa 
[root@controller ~]# cat aa
11111111
hello world
33333333
[root@controller ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
10.退出

命令q:用于在处理文本时,遇到指定条件后退出程序

[root@controller ~]# cat aa
11111111
hello world
33333333
hello
44444444
55555555
[root@controller ~]# 
[root@controller ~]# sed '2q' aa
11111111
hello world
[root@controller ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

打印2行退出,也可以打印多行退出。

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

闽ICP备14008679号