上篇我們講了如何用Unix sed編輯器替換文件內容,本教程我們來講講用sed如何讀寫文件操作,還有如何將一個文件部份內容寫入到另外一個文件里去,本文將展示如何將文件內容讀入到sed輸出,同時包含如何將一個文件的部分內容寫入到另一文件.
一.文件讀取
假定有兩個文件,file1和file2,內容分別如下:
- $ cat file1
- 1apple
- 1banana
- 1mango
- $ cat file2
- 2orange
- 2strawberry
sed有兩個選項用來讀寫文件
r filename:讀取filename指定的文件內容
w filename:將內容寫入filename指定的文件
看例子:
1.在file1的每一行讀完之后讀取file2的內容:
- $ sed ‘r file2’ file1
- 1apple
- 2orange
- 2strawberry
- 1banana
- 2orange
- 2strawberry
- 1mango
- 2orange
- 2strawberry
r file2讀取file2的所有內容,因此r之前沒有知道那個行號或匹配,因此有了上面的輸出,記住,sed的工作機制,每次讀file1的一行,然后執行命令.
2.如何在讀取了file1的第一行之后將file2讀入.
- $ sed ‘1r file2’ file1
- 1apple
- 2orange
- 2strawberry
- 1banana
- 1mango
r前面加個1就行了.
3.當file1某行匹配了模式之后,讀入file2.
- $ sed ‘/banana/r file2’ file1
- 1apple
- 1banana
- 2orange
- 2strawberry
- 1mango
sed逐行讀入file1,然后判斷該行是否匹配banana,如果匹配,就讀入file2.
4.當file1讀取完成后讀入file2,其實就是合并兩個文件.
- $ sed ‘$r file2’ file1
- 1apple
- 1banana
- 1mango
- 2orange
- 2strawberry
這里只是演示一下,其實cat file1 file2就可以完成合并.
二.文件寫入
使用一個file1文件,內容如下:
- $ cat file1
- apple
- banana
- mango
- orange
- strawberry
1.將file1的2-4行寫入到file2.
$ sed -n ‘2,4w file2’ file1
2,4w就是寫2-4行的意思,那-n呢?默認情況下sed會把讀入的文件處理的結果輸出到標準輸出,也就是終端,而為了不使用默認輸出,-n就派上用場了,執行該命令終端不會有任何輸出.
- $ cat file2
- banana
- mango
- orange
查看file2內容,發現已經寫入成功了.
2.從第三行開始全部寫入file2.
- $ sed -n ‘3,$w file2’ file1
- $ cat file2
- mango
- orange
- strawberry
就不多解釋了.
3.如果是用正則呢?
- $ sed -n ‘/apple/,/mango/w file2’ file1
- $ cat file2
- apple
- banana
- mango --Vevb.com
該命令將逐行讀入file1,然后判斷該行是否匹配apple,如果匹配,則作為起始行,然后繼續讀入,判斷是否匹配mango,如果是,則作為終止行,然后將中間的內容寫入到file2.
新聞熱點
疑難解答