sed:向文件末尾没有新行的每个文件添加新行

sed:向文件末尾没有新行的每个文件添加新行

我得到了无数

警告:文件末尾没有换行符

来自 Windows 中最后编辑的一些代码。

在 Linux 中,我如何修复所有这些 cpp/h 文件并在每个没有换行符的文件末尾添加一个新行?

我一直在尝试使用 sed:

find . \( -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print | xargs sed -i -e "$G"

但我还没让它工作。

答案1

在没有dos2unix- 这将是理想的方式,请尝试:

find . \( -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print0 | xargs -0 -iFILE sh -c 'echo >> FILE'

或者

find . -type f \( -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -exec sh -c 'echo >> {}' \;

请注意,重定向始终是一个问题 - 如果不启动新的 shell,替换就不会按预期进行。

由于您的问题是关于“sed”的,所以您也可以这样做:

find . \( -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print0 | xargs -0 sed -i -e '$a\
\'

(这是一个文字换行符 - 而不是 \n 或其他任何字符 - 最好通过复制和粘贴来完成 - 因为输入起来可能相当困难:)。

答案2

find . \( -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print | xargs dos2unix {}

相关内容