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

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


当前回答

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

echo $(cat file)

其他回答

下面是另一个使用awk的简单方法:

# cat > file.txt
a
b
c

# cat file.txt | awk '{ printf("%s ", $0) }'
a b c

此外,如果你的文件有列,这提供了一个简单的方法来连接某些列:

# cat > cols.txt
a b c
d e f

# cat cols.txt | awk '{ printf("%s ", $2) }'
b e

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

echo $(cat file)

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

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

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

我喜欢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

这可能就是你想要的

cat file | grep pattern | paste -sd' '

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

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

(这里假设~不会出现在文件中)