我有一个Git项目,其中包含许多没有尾随换行符的文件。我想添加尾随换行符而不添加多余的换行符。我怎么能这样做?
答案 0 :(得分:1)
我发现使用我通常使用的工具(grep
,sed
)会非常棘手,但是使用标准shell命令确实存在一个优雅的解决方案:
tail -c 1 file.txt | read || echo >> file.txt
tail
输出文件的最后一个字节read
将一行读入变量。如果指定了on变量,则为no-op,但如果在换行符之前出现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 {})" \;