我有一个包含数千行(甚至数百万行)的文件,但是我需要将所有内容放在一行上,并删除所有空格(那里不应该有空格,但可能有,如果有,则应将其删除)。如何实现?
为了提供一些背景信息,我得到了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