Linuxsed在某一行前面、後面追加(轉載)

sktj發表於2018-03-19

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

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/axiaowu` file
aaaa
bbbb
xiaowu
cccc
dddd

如果要加兩行“xiaowu”可以用一下語句,注意用“
”換行
[root@xiaowu shell]# sed `/bbbb/axiaowu
xiaowu` file
aaaa
bbbb
xiaowu
xiaowu
cccc
dddd

如果要在第二行即“bbbb”行的上新增一行,內容為“xiaowu”,可以把引數“a”換成“i”
[root@xiaowu shell]# sed `/b/ixiaowu` 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/axiaowu` 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 `4axiaowu` file
aaaa
bbbb
cccc
bbbb
xiaowu
dddd
[root@xiaowu shell]# sed -e `4axiaowu
xiaowu` 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


相關文章