如何将多行文件的所有内容压缩到一行上?

如何将多行文件的所有内容压缩到一行上?

我有一个包含数千行(甚至数百万行)的文件,但是我需要将所有内容放在一行上,并删除所有空格(那里不应该有空格,但可能有,如果有,则应将其删除)。如何实现?

为了提供一些背景信息,我得到了base64一个大文件的输出,现在需要将它通过管道传输到另一个命令中,但是我需要将它作为一个巨大的数字通过管道传输,但由于该文件由多行组成,而不是全部在一行上,我无法将它通过管道传输到程序中,因为它会将每一行视为一个新数字,而我需要将整个文件视为一个大数字。

我正在运行带有 GNOME 3.18 的 Ubuntu GNOME 15.10,我希望可以通过一个简单的命令和/或脚本来实现这一点。

答案1

更简单的方法:使用tr

tr -d '[[:space:]]' <file1 >file2

sponge(如果您需要写入同一个文件则使用。)


使用 Vim 非常简单:

vim -Nesc '%s/\_s//g' +wq file

使用awk,将RS(记录分隔符)设置为空格并将ORS(输出记录分隔符)设置为无:

awk -v RS='[[:space:]]' -v ORS= '1' foo

使用 GNU awk,您可以使用 进行就地编辑gawk -i inplace

答案2

通过这个 perl 正则表达式进行管道传输:

perl -p -e 's/[\n\r ]*//g'

答案3

AWK 可以通过循环所有字段并使用来实现这一点printf "%s"。示例

cat /etc/passwd | awk '{for(i=1;i<=NF;i++) printf "%s",$i}'

示例运行:

$ printf "to be or not to be\nthat is the question" | \         
> awk '{for(i=1;i<=NF;i++) printf "%s",$i}'
tobeornottobethatisthequestion

相关内容