如果我运行命令cat文件| grep pattern,我将得到许多行输出。如何将所有行连接成一行,有效地将每个“\n”替换为“\”(以“”结尾,后面加空格)?
Cat文件| grep模式| xargs sed s/\n/ /g 对我没用。
如果我运行命令cat文件| grep pattern,我将得到许多行输出。如何将所有行连接成一行,有效地将每个“\n”替换为“\”(以“”结尾,后面加空格)?
Cat文件| grep模式| xargs sed s/\n/ /g 对我没用。
当前回答
这是一个用逗号分隔输出的示例。您可以用任何分隔符替换逗号。
cat <<EOD | xargs | sed 's/ /,/g'
> 1
> 2
> 3
> 4
> 5
> EOD
生产:
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"
这可能就是你想要的
cat file | grep pattern | paste -sd' '
至于你的编辑,我不确定是什么意思,也许是这个?
cat file | grep pattern | paste -sd'~' | sed -e 's/~/" "/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
通过管道输出到xargs将每一行输出连接到带有空格的一行:
grep pattern file | xargs
或任何命令。Ls | xargs。xargs输出的默认限制是~4096个字符,但是可以使用eg来增加。Xargs -s 8192。
Grep Xargs