【问题标题】:Convert text files to single line将文本文件转换为单行
【发布时间】:2016-01-24 00:52:42
【问题描述】:

我试图寻找这个,但找不到任何适合我的东西。 我的问题是我需要将扩展​​名为.txt 的多个文件的内容转换为一行,例如:

1
2
3
4

我想转换为12341 2 3 4

我也有想要包含的子文件夹。我在 Linux 上尝试了多次,甚至在 Windows 上尝试了 TextCrawler 3,但没有任何帮助。

【问题讨论】:

标签: regex linux sed newline


【解决方案1】:

尝试翻译:

cat *.txt | tr -d '\n'

-d 表示删除所有换行符\n

如果你想有空间,你可以做

cat *.txt | tr '\n' ' '

【讨论】:

    【解决方案2】:

    删除换行符或用空格替换它们:

    $ paste -s -d '' infile
    1234
    $ paste -s -d ' ' infile
    1 2 3 4
    

    这只会打印到标准输出。要更改文件:

    $ paste -s -d ' ' infile > infile.tmp && mv infile.tmp infile
    $ cat infile
    1 2 3 4
    

    要对许多文件执行此操作,例如当前文件夹和所有子文件夹中的所有 .txt 文件:

    $ find -name '*.txt' -exec bash -c 'paste -s -d " " {} > {}.tmp && mv {}.tmp {}' \;
    

    这不是很优雅,因为它在exec 部分创建了一个子shell,但是当findexec 部分中有重定向时,这是一种方法。

    【讨论】:

      【解决方案3】:

      从 *.txt 中的文件中删除所有换行符

      sed -z -i 's/\n//g' *.txt
      

      将 *.txt 中的所有换行符转换为空格

      sed -z -i 's/\n/ /g' *.txt
      

      但对于子目录,您需要 find 的帮助。

      find -name "*.txt" -exec sed -z -i 's/\n/ /g' {} ';'
      

      【讨论】:

        猜你喜欢
        • 2019-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-10
        • 1970-01-01
        相关资源
        最近更新 更多