在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
但它没有成功。谢谢你的帮助。
答案 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