如何在许多文件的末尾添加换行符

时间:2017-04-07 14:55:59

标签: linux bash shell

我有很多PHP文件,我想在最后一行(如果不存在)后用bash脚本修复换行符。

是否有任何命令可以轻松实现?

谢谢:)

2 个答案:

答案 0 :(得分:3)

简短

tee是您正在搜索的工具:

简单地:

tee -a <<<'' file1 file2 ...

find /path -type f -name '*.php' -exec tee -a <<<'' {} +

警告:不要错过-a选项!

它非常快,但在每个文件上添加换行符。

(您可以在sed '${/^$/d}' -i file1 file2 ...之类的第二个命令中删除所有文件中所有空的最后一行。;)

......好的,按照要求。

一些解释:

来自man tee

NAME
       tee - read from standard input and write to standard output and files

SYNOPSIS
       tee [OPTION]... [FILE]...

DESCRIPTION
       Copy standard input to each FILE, and also to standard output.

       -a, --append
              append to the given FILEs, do not overwrite
  • 因此,tee会重现,追加(因为选项a),每个文件作为参数提交, >标准输入
  • 功能:&#34; here strings &#34; (请参阅man -Pless\ +/Here.Strings bash),您可以使用command <<<"here string""代替echo "here string"| command。为此,bash将换行符添加到提交的字符串(即使是空字符串:<<<'')。

更慢但更强

由于叉子有限而保持非常快速,但无论如何必须为每个文件分配一个tail -c1分叉!

find . -type f -name '*.php' -exec bash -c '
     for file in $@ ;do
         IFS= read -d "" foo < <(tail -c1 $file);
         [ "$foo" != $'\''\n'\'' ] && echo >> $file;
       done' -- {} +

答案 1 :(得分:1)

遍历所有文件(可以使用find)并通过读取检查尾部最后一个字符(如果是新行 - 对于Windows新行,您可以添加\ r \ n,如果读取返回0,则回显新行到这个档案

for i in *.php; do
    tail -c1 ${i} | read -r \n || echo '' >> ${i}
done