【发布时间】:2016-10-14 14:47:36
【问题描述】:
我有一个 Git 项目,其中包含很多没有尾随换行符的文件。我想添加尾随换行符而不添加多余的换行符。我该怎么做?
【问题讨论】:
我有一个 Git 项目,其中包含很多没有尾随换行符的文件。我想添加尾随换行符而不添加多余的换行符。我该怎么做?
【问题讨论】:
我发现使用我通常使用的工具(grep、sed)执行此操作非常棘手,但使用标准 shell 命令确实存在一个优雅的解决方案:
tail -c 1 file.txt | read || echo >> file.txt
tail 输出文件的最后一个字节read 将一行读入变量。如果指定了 on 变量,则为无操作,但如果 EOF 出现在换行符之前,则以代码 1 退出。echo 仅在读取失败时运行(即,如果最后一个字符不是换行符),并将换行符附加到 file.txt
find:find -not -path "./.git/*" -type f -exec sh -c "grep -Iq . {} && (tail -c 1 {} | read || echo >> {})" \;
-not -path 不包括 .git/,我们不想搞砸-type f 将搜索限制为文件-exec sh -c "..." 需要将包含管道的命令捆绑在一起grep -Iq . 搜索任何内容 (.),因此是无操作的,但如果文件是二进制文件,则以代码 1 退出{} 标记find 将插入文件名的位置echo >> {} 替换为echo {} 来做到这一点:find -not -path "./.git/*" -type f -exec sh -c "grep -Iq . {} && (tail -c 1 {} | read || echo {})" \;
【讨论】: