SHELL 在指定行的前/后插入指定内容

本文介绍了如何使用SHELL的sed命令在文件中指定行的前后插入内容,以及替换内容。通过示例展示了在某行的下方添加一行或多行,上方添加内容,以及在特定匹配行的末尾添加内容。此外,还讲解了如何使用awk和grep配合找到特定行号,以及在匹配多行的情况下进行操作。最后,文章涵盖了sed命令的其他功能,如全局替换、忽略大小写、打印和写入标志等。
摘要由CSDN通过智能技术生成

#如果知道行号可以用下面的方法

sed -i '88 r b.file' a.file    #在a.txt的第88行插入文件b.txt

awk '1;NR==88{system("cat b.file")}' a.file > a.file

 

#如果不知道行号,可以用正則匹配

sed -i '/regex/ r b.txt' a.txt # regex是正则表达式

awk '/target/{system("cat b.file")}' a.file > c.file

#sed的話如果不改变源文件,可以去掉-i开关,修改会输出到STDOUT

 

原文件:

[root@xiaowu shell]# cat -n file 

     1  aaaa

     2  bbbb

     3  cccc

     4  dddd

 

现在要在第二行即“bbbb”行的下面添加一行,内容为“xiaowu”

[root@xiaowu shell]# sed '/bbbb/a\xiaowu' file 

aaaa

bbbb

xiaowu

cccc

dddd

 

如果要加两行“xiaowu”可以用一下语句,注意用“\n”换行

[root@xiaowu shell]# sed '/bbbb/a\xiaowu\nxiaowu' file 

aaaa

bbbb

xiaowu

xiaowu

cccc

dddd

 

如果要在第二行即“bbbb”行的上添加一行,内容为“xiaowu”,可以把参数“a”换成“i”

[root@xiaowu shell]# sed '/b/i\xiaowu' file 

aaaa

xiaowu

bbbb

cccc

dddd

 

以上文件中只有一行匹配,如果文件中有两行或者多行匹配,结果有是如何呢?

 

[root@xiaowu shell]# cat -n file 

     1  aaaa

     2  bbbb

     3  cccc

     4  bbbb

     5  dddd

 

[root@xiaowu shell]# sed '/bbbb/a\xiaowu' file 

aaaa

bbbb

xiaowu

cccc

bbbb

xiaowu

dddd

 

由结果可知,每个匹配行的下一行都会被添加“xiaowu”

 

那么如果指向在第二个“bbbb”的下一行添加内容“xiaowu”,该如何操作呢?

可以考虑先获取第二个“bbbb”行的行号,然后根据行号在此行的下一行添加“xiaowu”

 

获取第二个“bbbb”行的行号的方法:

方法一:

[root@xiaowu shell]# cat -n file |grep b |awk '{print $1}'|sed -n "2"p

4

方法二:

[root@xiaowu shell]# sed -n '/bbbb/=' file |sed -n "2"p

4

由结果可知第二个“bbbb”行的行号为4,然后再在第四行的前或后添加相应的内容:

[root@xiaowu shell]# sed -e '4a\xiaowu' file 

aaaa

bbbb

cccc

bbbb

xiaowu

dddd

[root@xiaowu shell]# sed -e '4a\xiaowu\nxiaowu' file 

aaaa

bbbb

cccc

bbbb

<
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值