Shell指令碼實現對檔案編輯

2021-10-01 16:12:44 字數 3870 閱讀 2130

常見linux檔案的編輯命令 vi/vim,有時候我們想寫乙個指令碼實現對檔案編輯,這個時候,可能就不夠用了,下面介紹一些辦法

1、echo命令

shell的echo命令常用於字串的輸出

例如:[root@mdw zxy]# echo 'hello world !' > file1

[root@mdw zxy]# cat file1

hello world !

[root@mdw zxy]# echo 'good luck' > file1

[root@mdw zxy]# cat file1 

good luck

[root@mdw zxy]# 

>>追加

[root@mdw zxy]# echo 'hello world !' >> file1              

[root@mdw zxy]# cat file1                    

good luck

hello world !

2、sed命令

sed命令是乙個面向字元流的非互動式編輯器,sed是按行來處理文字內容的。在shell中,使用sed來批量修改文字內容是非常方便的。處理時,把當前處理的行儲存在臨時緩衝區中,稱為「模式空間」(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有 改變,除非你使用重定向儲存輸出。sed主要用來自動編輯乙個或多個檔案;簡化對檔案的反覆操作;編寫轉換程式等。

2.1 使用sed把aaa新增到檔案file1中

[root@mdw zxy]# sed -i '$a aaaa' file1 

[root@mdw zxy]# cat file1              

good luck

hello world !

aaaa

其中$代表最後一行,a是新增

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

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

方法二:

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

由結果可知第二個「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

2.2 使用sed命令對檔案中的字元替換

例如:[root@mdw zxy]# sed -i 's|aaaa|bbbb|' file1

[root@mdw zxy]# cat file1                  

good luck

hello world !

bbbb

2.3特殊字元的替換

[root@mdw zxy]# echo 'hello,world!!!' >>file1

[root@mdw zxy]# sed -i 's|,|*|' file1        

[root@mdw zxy]# cat file1                    

good luck

hello world !

bbbb

hello*world!!!

[root@mdw zxy]# 

Shell指令碼實現對檔案編輯

常見linux檔案的編輯命令 vi vim,有時候我們想寫乙個指令碼實現對檔案編輯,這個時候,可能就不夠用了,下面介紹一些辦法 1 echo命令 shell的echo命令常用於字串的輸出 例如 root mdw zxy echo hello world file1 root mdw zxy cat ...

Shell指令碼實現對檔案編輯

常見linux檔案的編輯命令 vi vim,有時候我們想寫乙個指令碼實現對檔案編輯,這個時候,可能就不夠用了,下面介紹一些辦法 1 echo命令 shell的echo命令常用於字串的輸出 例如 root mdw zxy echo hello world file1 root mdw zxy cat ...

shell 對檔案判斷

shell if判斷 a 檔案 如果檔案存在為真。b 檔案 如果 檔案 存在 而且 是乙個 塊 特殊 檔案為真。c 檔案 為真 如果 檔案 存在 而且 是乙個 字 特殊 檔案。d 檔案 為真 如果 檔案 存在 而且 是乙個 目錄。e 檔案 為真 如果 檔案 存在。f 檔案 為真 如果 檔案 存在 而...