Shell腳本實現對文件編輯



常見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{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



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]#


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM