如何将多行代码连接到一行中,使用分隔符代表换行符,并避免尾随分隔符,并且可以忽略空行?
例。考虑一个文本文件foo.txt
,有三行:
foo
bar
baz
期望的输出是:
foo,bar,baz
我现在使用的命令:
tr '\n' ',' <foo.txt |sed 's/,$//g'
理想情况下,它会是这样的:
cat foo.txt |join ,
什么是:
发布于 2018-05-24 14:16:57
paste
是一个很好的方法来做到这一点:
paste -s -d","
这不会处理你提到的空行。为此,请先通过以下方式输入文字grep
:
grep -v '^$' | paste -s -d"," -
发布于 2018-05-24 15:35:33
这一sed
行应该工作 -
sed -e :a -e 'N;s/\n/,/;ba' file
测试:
[jaypal:~/Temp] cat file
foo
bar
baz
[jaypal:~/Temp] sed -e :a -e 'N;s/\n/,/;ba' file
foo,bar,baz
要处理空行,可以删除空行并将其传送到上面的单行内容。
sed -e '/^$/d' file | sed -e :a -e 'N;s/\n/,/;ba'
https://stackoverflow.com/questions/-100001361
复制相似问题