常見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
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]#
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 檔案 為真 如果 檔案 存在 而...