如何为没有文件的文件添加尾随换行符?

时间:2016-10-14 14:47:36

标签: replace newline

我有一个Git项目,其中包含许多没有尾随换行符的文件。我想添加尾随换行符而不添加多余的换行符。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

我发现使用我通常使用的工具(grepsed)会非常棘手,但是使用标准shell命令确实存在一个优雅的解决方案:

tail -c 1 file.txt | read || echo >> file.txt    
  1. tail输出文件的最后一个字节
  2. read将一行读入变量。如果指定了on变量,则为no-op,但如果在换行符之前出现EOF,则退出代码为1。
  3. echo仅在读取失败时运行(即如果最后一个字符不是换行符),并在file.txt附加换行符
  4. 要查找我们要更改的文件,您可以使用find

    find -not -path "./.git/*" -type f -exec sh -c "grep -Iq . {} && (tail -c 1 {} | read || echo >> {})" \;
    
    1. -not -path排除.git/,我们不想搞砸
    2. -type f将搜索限制为文件
    3. -exec sh -c "..."需要将包含管道的命令捆绑在一起
    4. grep -Iq .搜索任何内容(.),因此是无操作,但如果文件是二进制文件,则退出代码为1
    5. {}标记find将插入文件名
    6. 的位置

      我建议在运行命令之前检查文件列表。通过将echo >> {}替换为echo {}

      来执行此操作
      find -not -path "./.git/*" -type f -exec sh -c "grep -Iq . {} && (tail -c 1 {} | read || echo {})" \;