2011-05-07 103 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结束。