#如果知道行號可以用下面的方法
sed
-i
'88 r b.file'
a.
file
#在a.txt的第88行插入檔案b.txt
awk
'1;nr==88'
a.
file
> a.
file
#如果不知道行號,可以用正則匹配
sed
-i
'/regex/ r b.txt'
a.txt
# regex是正規表示式
awk
'/target/'
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 ''|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
sed在指定行插入新行
前些天備份使用mysqldump備份出的資料檔案 insert形式 裡面的內容沒有use db name這個語句,所以如果在指令碼中執行,那麼會提示no database selected,所以就想在裡面新增乙個use db name的語句。但是因為資料檔案太大,如果直接vim開啟恐怕不行。所以想到...
shell中對檔案指定行的操作
1 awk1 awk 可以設定條件來輸出檔案中m行到n行中每行的指定的k欄位,使用格式如下 awk nr m,nr n path filename m,n,k表示實在的數值,其中k為0 9。如果要用變數來表示m,n的值,則變數需要用單引號將其引起來。nr,是awk命令在此用法下的規定字段 path ...
Coolite 在C 端刪除指定的行
介面上如下 還需要注意要加句這樣的 這個的companyuser 就是你建立 頁面的名稱如 page language c autoeventwireup true codefile companyuser.aspx.cs inherits xitong companyuser cs裡面的方法如下 ...