Unix:将多行文件转换为单行

时间:2013-01-09 06:24:38

标签: unix

在Unix中将多行文件转换为单行文件的最简单命令是什么?

文件中的示例数据是

SELECT * FROM TABLE1 t1
   JOIN TABLE2 t2 ON (t1.ID = t2.ID)
   WHERE t1.ID = 123

所需的输出

SELECT * FROM TABLE1 t1 JOIN TABLE2 t2 ON (t1.ID = t2.ID) WHERE t1.ID = 123

我尝试过使用:

/bin/sed '{:q;N;s/  / /g;s/\n//g;t q}' $1

但它没有成功。谢谢你的帮助。

4 个答案:

答案 0 :(得分:1)

看起来你正在尝试更新存储在unix目录中的sql。 如果安装了Notepad ++,则可以用空格或空字符串替换 \ r \ n 。务必在搜索模式中选择“扩展

答案 1 :(得分:1)

尝试使用sed,如下所示:

sed ':a; N; $!ba; s/\n\s*/ /g' file

或者像这样使用awk

awk '{ $1 = $1 }1' RS= file

结果:

SELECT * FROM TABLE1 t1 JOIN TABLE2 t2 ON (t1.ID = t2.ID) WHERE t1.ID = 123

答案 2 :(得分:1)

使用Perl:

perl -p -e'chomp' filename

附录:

如果有一个尾随换行符并且要从每一行中删除前导空格很重要,那么你可以这样做:

perl -l -n -e's/^\s+//; push @x, $_; END { print join( ' ', @x ); }' filename

答案 3 :(得分:0)

最简单的方法(取决于“简单”的定义)是:

tr -s \\n ' '

如果您希望输出具有换行符:

 { tr -s \\n \ < input-file && echo; } > output-file