快速回答
sed ':a;N;$!ba;s/\n/ /g' file
- :a  创建标签'a'
- N  将下一行追加到模式空间
- $! 如果不是最后一行,则ba  分支(转到)标签“ a”
- 小号 替代,/ \ N /  新线的正则表达式,/ /  通过的空间,/克 全局匹配(多次它可以)
sed将循环执行第1步到第3步,直到到达最后一行,使所有行都适合sed将替换所有\ n字符的模式空间
备择方案
与sed不同,所有替代方法都无需到达最后一行即可开始该过程
用bash慢
while read line; do printf "%s" "$line "; done < file
用perl的,sed的样速度
perl -p -e 's/\n/ /' file
与TR,速度比sed的,可以由一个字符替换只
tr '\n' ' ' < file
使用粘贴,tr状速度,只能替换一个字符
paste -s -d ' ' file
与AWK,TR般的速度
awk 1 ORS=' ' file
其他替代方法如“ echo $(<file)”速度很慢,仅适用于小文件,需要处理整个文件才能开始处理。
5.10。为什么我不能使用\ n转义
      序列来匹配或删除换行符?为什么我不能使用\ n匹配两行或更多行?                   
\ n永远不会与行尾的换行符匹配,因为在将
   换行符放入
   模式空间之前,总是会删除换行符。要将2行或更多行插入模式空间,请使用
   'N'命令或类似的命令(例如'H; ...; g;')。                 
sed的工作方式如下:sed一次读取一行,剪掉
   终止的换行符,将剩下的内容放入
   sed脚本可以寻址或更改的模式空间中,并且在
   打印模式空间时,在stdout后面添加一个换行符(或到文件)。如果
   用'd'或'D'完全或部分删除了模式空间,则在这种情况下不添加
   换行符。因此,类似                   
  sed 's/\n//' file       # to delete newlines from each line             
  sed 's/\n/foo\n/' file  # to add a word to the end of each line         
将永远行不通,因为在
 
   将行放入模式空间之前先删除尾随的换行符。要执行上述任务,请
   改用以下脚本之一:                                          
  tr -d '\n' < file              # use tr to delete newlines              
  sed ':a;N;$!ba;s/\n//g' file   # GNU sed to delete newlines             
  sed 's/$/ foo/' file           # add "foo" to end of each line          
由于GNU sed以外的sed版本对
   模式缓冲区的大小有限制,因此在这里最好使用Unix'tr'实用程序。
   如果文件的最后一行包含换行符,则GNU sed会将
   换行符添加到输出中,但删除所有其他
   换行符,而tr将删除所有换行符。                                                       
为了匹配两行或更多行的块,有3种基本选择:
   (1)使用'N'命令将下一行添加到模式空间;
   (2)至少使用两次“ H”命令将当前行追加
   到Hold空间,然后
   使用x,g或G 从hold空间中检索这些行;或(3)使用地址范围(请参见上文第3.3节)
   来匹配两个指定地址之间的行。                            
选项(1)和(2)将\ n放入模式空间,
   可以根据需要对其进行寻址('s / ABC \ nXYZ / alphabet / g')。
   第4.13节
   (“如何删除特定的连续行的块?”)显示了一个使用“ N”删除行的块的示例。
   可以通过将delete命令更改为其他
   内容来修改此示例,例如“ p”(打印),“ i”(插入),“ c”(更改),“ a”(附加)
   或“ s”(替代) 。                                                       
选择(3)不会将\ n放入模式空间,但它确实
 
   匹配了连续的行块,因此可能
   甚至不需要\ n来查找所需的内容。由于GNU sed 
   版本3.02.80现在支持以下语法:                                  
  sed '/start/,+4d'  # to delete "start" plus the next 4 lines,           
除了传统的'/ from here /,/ to there / {...}'范围
   地址外,还可以完全避免使用\ n。
               
              
tr如果将单个字符替换为单个字符,则仅是该工作的正确工具,而上例显示了用空格替换换行符。因此,在上例中,tr可以工作。