【发布时间】:2016-01-24 00:52:42
【问题描述】:
我试图寻找这个,但找不到任何适合我的东西。
我的问题是我需要将扩展名为.txt 的多个文件的内容转换为一行,例如:
1
2
3
4
我想转换为1234 或1 2 3 4。
我也有想要包含的子文件夹。我在 Linux 上尝试了多次,甚至在 Windows 上尝试了 TextCrawler 3,但没有任何帮助。
【问题讨论】:
我试图寻找这个,但找不到任何适合我的东西。
我的问题是我需要将扩展名为.txt 的多个文件的内容转换为一行,例如:
1
2
3
4
我想转换为1234 或1 2 3 4。
我也有想要包含的子文件夹。我在 Linux 上尝试了多次,甚至在 Windows 上尝试了 TextCrawler 3,但没有任何帮助。
【问题讨论】:
尝试翻译:
cat *.txt | tr -d '\n'
-d 表示删除所有换行符\n。
如果你想有空间,你可以做
cat *.txt | tr '\n' ' '
【讨论】:
删除换行符或用空格替换它们:
$ 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,但是当find 的exec 部分中有重定向时,这是一种方法。
【讨论】:
从 *.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' {} ';'
【讨论】: