如果我运行命令cat文件| grep pattern,我将得到许多行输出。如何将所有行连接成一行,有效地将每个“\n”替换为“\”(以“”结尾,后面加空格)?

Cat文件| grep模式| xargs sed s/\n/ /g 对我没用。


当前回答

我喜欢xargs的解决方案,但如果不折叠空格很重要,那么可以这样做:

sed ':b;N;$!bb;s/\n/ /g'

这将为空格替换换行符,而不像tr '\n' ' ' '那样替换最后一行结束符。

这也允许你使用除空格之外的其他连接字符串,比如逗号等,这是xargs无法做到的:

$ seq 1 5 | sed ':b;N;$!bb;s/\n/,/g'
1,2,3,4,5

其他回答

在red hat linux上,我只使用echo:

Echo $(cat /some/file/name)

这将在一行中给出文件的所有记录。

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

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

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

编辑:

Tr只能处理单个字符的转换。您可以使用awk更改输出记录分隔符,如下所示:

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

这将转化为:

one
two 
three

to:

one" two" three" 

下面是使用ex编辑器(Vim的一部分)的方法:

连接所有行并打印到标准输出: $ x +%j +%p -scq!文件 (在文件中)原位连接所有行: $ ex +%j -scwq文件 注意:这将连接文件内部的所有行!

可能最好的方法是使用“awk”工具,它将生成输出到一行

$ awk ' /pattern/ {print}' ORS=' ' /path/to/file

它将使用空格分隔符将所有行合并为一行

这是一个用逗号分隔输出的示例。您可以用任何分隔符替换逗号。

cat <<EOD | xargs | sed 's/ /,/g'
> 1
> 2
> 3
> 4
> 5
> EOD

生产:

1,2,3,4,5