< 返回上层

sed指定某行插入、追加、全局替换

2019-04-15 16:01:52 31次

有时候会有这样的需求,在指定的行后面或者是前面追加一行,这个时候可以使用sed来完成,具体用法如下

a\ 在指定的行后面追加一行

b\ 在指定的行前面追加一行


### 使用指定的行号追加内容,在使用行号的过程中,需要注意的问题有以下

### N;后面只能使用偶数,且不可以为0

###  a表示在指定的行后面追加一行

###  i表示在当前行插入一行,如果指定行为4,其实最终的结果插入行的位置是第三行。

sed -i 'N;2a\newline' 1.txt

sed -i 'N;2i\newline' 1.txt


[root@lanmp shell]# cat << eof > 1.txt
> a
> b
> c
> d
> eof
[root@lanmp shell]# sed -i 'N;2a2222' 1.txt
[root@lanmp shell]# cat 1.txt
a
b
2222
c
d
[root@lanmp shell]# sed -i 'N;2i2222' 1.txt
[root@lanmp shell]# cat 1.txt
2222
a
b
2222
c
d
 
 
[root@RS2 shell]# cat 1.txt
1111
3333
[root@RS2 shell]# sed -i '/^1111$/a\2222' 1.txt ; cat 1.txt
1111
2222
3333
[root@RS2 shell]# sed -i '/^1111$/i\0000' 1.txt ; cat 1.txt
0000
1111
2222
3333

下面是把所有匹配的字符都替换为指定的字符


[root@vmmonitor html]# cat -n 1.txt
     1    11111111
     2    222222222
     3    22222222222
     4    33333333
     5    4
     6    555555
     7    888
[root@vmmonitor html]# sed 3{s/2/3/} 1.txt
11111111
222222222
32222222222
33333333
4
555555
888
[root@vmmonitor html]# vim 1.txt
[root@vmmonitor html]# vim 1.txt
[root@vmmonitor html]# cat 1.txt
11111111
222222222
222333333322222222
3322222222222222333333
4
555555
888
[root@vmmonitor html]# sed 3{s/2/3/g} 1.txt
11111111
222222222
333333333333333333
3322222222222222333333
4
555555
888
 
[root@SLAVE ~]# cat << eof > 1.txt> 1111
> 222333333
> 44444444445
> eof
[root@SLAVE ~]# sed -i 2{s/2/3/g} 1.txt
[root@SLAVE ~]# cat 1.txt
1111
333333333
44444444445
[root@SLAVE ~]# sed -i 3{s/4/5/g} 1.txt
[root@SLAVE ~]# cat !$
cat 1.txt
1111
333333333
 
55555555555



提交成功!非常感谢您的反馈,我们会继续努力做到更好!

更多建议

这条文档是否有帮助解决问题?

没有帮助 有帮助

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: