2011-05-07 52 views

回答

28

要在文件的末尾添加一個新行:

for x in *; do echo >>"$x"; done 

如果你不知道:

echo >>file 

要在當前目錄下的每個文件的末尾添加一行提前確定每個文件是否以換行符結尾,首先測試最後一個字符。 tail -c 1打印文件的最後一個字符。由於命令替換會截斷最後一個換行符,因此$(tail -c 1 <file)在文件爲空或以換行符結束時爲空,如果文件以非換行符結尾則爲非空。

for x in *; do if [ -n "$(tail -c 1 <"$x")" ]; then echo >>"$x"; fi; done 
+1

爲什麼'tail -c 1'如果文件以換行符結束則什麼也不返回? – 2011-05-07 17:20:33

+3

@MuMind:'tail -c 1'總是返回最後一個字符,不管它是換行還是不行。這是shell的命令替換結構'$(...)',它剝奪了最終的換行符。所以如果'tail -c 1'只輸出一個非換行符,就會得到那個字符。如果'tail -c 1'只輸出一個換行符,或者什麼都不輸出(空文件),你什麼也得不到。 – Gilles 2011-05-07 17:38:48

+0

如果您不想將新行添加到空文件,請使用...'if [-s「$ x」-a -n「$(tail -c 1 <」$ x「)」];然後'... – 2011-05-07 19:21:02

1
echo >> filename 

大規模使用前試試吧:)

5

Vim的是偉大的,因爲如果你不binary模式下打開一個文件時,它會自動結束與檢測線結尾的文件。

所以:

vim file -c 'wq' 

應該工作,不管你的文件是否的Unix,Windows或線風格的Mac結束。