如何在除最后一行之外的每一行的末尾添加逗号?

时间:2016-01-26 18:49:50

标签: bash sed command-line

我想在除最后一行之外的这类文件的每一行末尾添加一个逗号:

我现在有这个:

{...}
{...}
{...}
{...}

我想要这个:

{...},
{...},
{...},
{...}

如何使用命令行执行此操作?是否可以使用sed命令?

4 个答案:

答案 0 :(得分:51)

以下sed脚本的地址表达式$!匹配不是最后一行的行,以及一个替换动作s/$/,/,它在行尾添加逗号。< / p>

sed '$!s/$/,/' file

(地址中的$指的是最后一个,而替换中正则表达式中的$指的是最后一个字符位置在每一行。它们是无关的,虽然在某种意义上相似。)

file的修改内容打印到标准输出;重定向到其他文件以将其保存到文件中,或者如果sed -i支持,则使用sed。 (某些变体需要-i选项的空参数,特别是* BSD / OSX sed。)

如果你的任务是从不是的东西生成有效的JSON,我对这种方法持怀疑态度。应该使用理解结构化格式的工具来操纵结构化格式,而不是基本的面向行的工具;但如果这有助于您将面向行的数据转换为适当的JSON,那么这可能是一种有效的用途。

...作为一个事后的想法,也许你想把输出包装在一组方括号中。然后它实际上是技术上有效的JSON(假设每一行都是一个有效的JSON片段)。

sed '1s/^/[/;$!s/$/,/;$s/$/]/' file

在第一行(地址表达式1)替换为行开头(s/^/[/)的左方括号。在不是最后一行的行上,添加一个尾随逗号,如上所述。在 最后一行(地址表达式$)的行上,在行尾(s/$/]/)添加一个结束方括号。如果您更喜欢换行符号,那就没问题;许多sed方言也允许您将其拆分为多个-e个参数。

答案 1 :(得分:3)

保持简单,只需使用awk:

$ awk '{printf "%s%s",sep,$0; sep=",\n"} END{print ""}' file
{...},
{...},
{...},
{...}

答案 2 :(得分:2)

vim <file-name>

:%s/$/,/g

要删除

:%s/,//g

答案 3 :(得分:-2)

您可以使用以下内容:

 sed 's/$/,/' file.txt > file_with_added_commas.txt

这将用行''替换行尾,并将其写入file_with_added_commas.txt

有关更多信息,请参阅:add text at the end of each line