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