如何将多行输出连接到一行?
如果我运行命令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 | xargs
。 xargs
输出的默认限制是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
注意:这将连接文件内的所有行它自己!