将逗号替换为换行符,后面仅包含命令和空格

将逗号替换为换行符,后面仅包含命令和空格

我有一个这样的清单。

blue-image1.jpg,
blue-image2.jpg,
blue-image3.jpg
red-image1.jpg,
red-image2.jpg,
red-image3.jpg

它最初是 csv 格式,但我添加了换行符,因为它们首先需要前缀。现在我需要把它们重新组合在一起,所以就变成了这样。

blue-image1.jpg,blue-image2.jpg,blue-image3.jpg
red-image1.jpg,red-image2.jpg,red-image3.jpg

我尝试过cat list.txt | tr ',\n' ','并且cat list.txt | sed 's/,\n/,/g'

但似乎都不能正常工作。

答案1

就这么简单:

$ sed -z 's/,\n/,/g' infile
blue-image1.jpg,blue-image2.jpg,blue-image3.jpg
red-image1.jpg,red-image2.jpg,red-image3.jpg

-z开关将输入记录分隔符设置为NUL,从而避免了 的问题\n。看man sed

-z, --null-data
用 NUL 字符分隔行

答案2

我承认,从技术上讲,下一个答案的 cpu 效率低于对 的一次调用sed,但我将其添加到混合中,因为它比其他答案更容易记住、编写、阅读、理解和修改:

cat list.txt | tr ',\n' '#@' | sed 's/#@/,/g;s/@/\n/g'

答案3

这本质上是相同的39. 如果一行以反斜杠“\”结尾,则将其追加到下一行。来自彼得里斯·克鲁明斯Sed 单行解释,第一部分:文件间距、编号以及文本转换和替换但用逗号代替反斜杠作为延续字符,即

sed -e :a -e '/,$/N; s/,\n/,/; ta' list.txt
blue-image1.jpg,blue-image2.jpg,blue-image3.jpg
red-image1.jpg,red-image2.jpg,red-image3.jpg

答案4

sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g' yourfile

相关内容