SHELL 在指定行的前 後插入指定內容

2021-07-29 21:54:37 字數 2528 閱讀 5411

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

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裡面的方法如下 ...