#如果知道行號可以用下面的方法
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
xiaowu
xiaowu
dddd
向指定行的末尾添加指定內容,比如在“ccccc”行的行尾介紹“ eeeee”
[root@xiaowu shell]# cat file
aaaaa
bbbbb
ccccc
ddddd
[root@xiaowu shell]# sed 's/cc.*/& eeeee/g' file
aaaaa
bbbbb
ccccc eeeee
ddddd
