如何将多行输出连接到一行?

如果我运行命令cat file | grep pattern cat file | grep pattern ,我得到很多输出。 如何将所有的行连接成一行,用"\n"有效地replace每个"\n" "\" " (以"后跟空格"\" "结尾)?

cat file | grep pattern | xargs sed s/\n/ /g cat file | grep pattern | xargs sed s/\n/ /g不适合我。

使用tr '\n' ' '将所有换行符转换为空格:

 $ grep pattern file | tr '\n' ' ' 

注: grep读取文件, cat连接文件。 不要cat file | grep cat file | grep

编辑:

tr只能处理单个字符的翻译。 您可以使用awk来更改输出logging分隔符,如:

 $ grep pattern file | awk '{print}' ORS='" ' 

这将改变:

 one two three 

至:

 one" two" three" 

输出到xargs输出将把输出的每一行与空格连接成一行:

 grep pattern file | xargs 

或者任何命令,例如。 ls | xargs ls | xargsxargs输出的默认限制是xargs个字符,但可以用例如。 xargs -s 8192

grep xargs

在不带引号的bash echo中删除回车符,制表符和多个空格

 echo $(cat file) 

这可能是你想要的

 cat file | grep pattern | paste -sd' ' 

至于你的编辑,我不确定这是什么意思,也许这个?

 cat file | grep pattern | paste -sd'~' | sed -e 's/~/" "/g' 

(这个假设~不会出现在file

这里是使用ex编辑器的方法:

  • 所有行和标准输出结果中:

     $ ex +%j +%p -scq! file 
  • 在所有行中(在文件中):

     $ ex +%j -scwq file 

    注意:这将连接文件内的所有行它自己!