【问题标题】:Add missing newlines in multiple files在多个文件中添加缺少的换行符
【发布时间】:2011-08-20 19:55:57
【问题描述】:

我有一堆不完整的文件:最后一行缺少 EOL 字符。

使用任何工具(也许是 awk?)添加换行符的最简单方法是什么?

【问题讨论】:

    标签: bash awk newline text-files


    【解决方案1】:

    在文件末尾添加换行符:

    echo >>file
    

    在当前目录中每个文件的末尾添加一行:

    for x in *; do echo >>"$x"; done
    

    如果您事先不知道每个文件是否以换行符结尾,请先测试最后一个字符。 tail -c 1 打印文件的最后一个字符。由于命令替换会截断任何最后的换行符,如果文件为空或以换行符结尾,$(tail -c 1 <file) 为空,如果文件以非换行符结尾,则为非空。

    for x in *; do if [ -n "$(tail -c 1 <"$x")" ]; then echo >>"$x"; fi; done
    

    【讨论】:

    • 如果文件以换行符结尾,为什么tail -c 1 不返回任何内容?
    • @MuMind: tail -c 1 总是返回最后一个字符,无论它是否是换行符。它是 shell 的命令替换构造 $(…) 去除最后的换行符。所以如果tail -c 1 只输出一个非换行符,你就会得到那个字符。如果tail -c 1 只输出一个换行符,或者什么都不输出(空文件),你什么也得不到。
    • 如果您不想在空文件中添加换行符,请使用 ...if [ -s "$x" -a -n "$(tail -c 1 &lt;"$x")" ]; then...
    • @Gordon:不需要额外的复杂性。 $(tail -c 1 &lt;"$x") 是空文件。
    • 你是对的;我只是把条件搞砸了。
    【解决方案2】:

    Vim 非常适合,因为如果你不在binary 模式下打开文件,它会自动以检测到的行结尾结束文件。

    所以:

    vim file -c 'wq'
    

    应该可以工作,无论您的文件是 Unix、Windows 还是 Mac 行尾样式。

    【讨论】:

      【解决方案3】:
      echo >> filename
      

      在大量使用之前尝试一下:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-10
        • 1970-01-01
        • 2019-07-05
        • 2021-10-31
        • 2011-11-10
        • 2016-06-01
        • 2015-03-24
        相关资源
        最近更新 更多