1

在 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

4 回答 4

2

尝试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
于 2013-01-09T06:44:36.807 回答
1

使用 Perl:

perl -p -e'chomp' filename

附录:

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

perl -l -n -e's/^\s+//; push @x, $_; END { print join( ' ', @x ); }' filename
于 2013-01-09T06:53:05.937 回答
1

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

于 2013-01-09T06:41:10.920 回答
0

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

tr -s \\n ' '

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

 { tr -s \\n \ < input-file && echo; } > output-file
于 2013-01-09T21:42:15.717 回答