如果我运行 command cat file | grep pattern
,我会得到很多行输出。您如何将所有行连接成一行,有效地将每一行替换"\n"
为(以空格"\" "
结尾)?"
cat file | grep pattern | xargs sed s/\n/ /g
不适合我。
用于tr '\n' ' '
将所有换行符转换为空格:
$ grep pattern file | tr '\n' ' '
注意:grep
读取文件,cat
连接文件。不要cat file | grep
!
编辑:
tr
只能处理单字符翻译。您可以使用awk
更改输出记录分隔符,如:
$ grep pattern file | awk '{print}' ORS='" '
这将改变:
one
two
three
至:
one" two" three"
在不带引号的 bashecho
中删除回车、制表符和多个空格
echo $(cat file)
这可能是你想要的
cat file | grep pattern | paste -sd' '
至于您的编辑,我不确定这意味着什么,也许是这个?
cat file | grep pattern | paste -sd'~' | sed -e 's/~/" "/g'
(这假设~
不会发生在file
)
这是一个用逗号分隔输出的示例。您可以用您需要的任何分隔符替换逗号。
cat <<EOD | xargs | sed 's/ /,/g'
> 1
> 2
> 3
> 4
> 5
> EOD
产生:
1,2,3,4,5
当我们想用空格替换换行符 时:\n
xargs < file
xargs
每行字符数和所有字符组合的数量都有自己的限制,但我们可以增加它们。可以通过运行以下命令找到详细信息:xargs --show-limits
当然也可以在手册中找到:man xargs
当我们想用另一个字符替换一个字符时:
tr '\n' ' ' < file
当我们想用多个字符替换一个字符时:
tr '\n' '~' < file | sed s/~/many_characters/g
首先,我们将换行符替换\n
为波浪号~
(或选择文本中不存在的另一个唯一字符),然后我们将波浪号替换为任何其他字符 ( many_characters
),并为每个波浪号 (flag 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
这是另一个使用的简单方法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
可能最好的方法是使用“awk”工具,它将生成输出到一行
$ awk ' /pattern/ {print}' ORS=' ' /path/to/file
它将所有行合并为一个带空格分隔符的行
在 red hat linux 上,我只使用 echo :
回声 $(cat /some/file/name)
这给了我一个文件的所有记录在一行上。