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

Posted

技术标签:

【中文标题】如何在除最后一行之外的每一行末尾添加逗号?【英文标题】:How can I add a comma at the end of every line except the last line? 【发布时间】:2016-05-03 11:16:20 【问题描述】:

我想在这种文件的每一行末尾添加一个逗号,除了最后一行:

我现在有这个:

...
...
...
...

我想要这个:

...,
...,
...,
...

我怎样才能用命令行来做呢? sed命令可以吗?

【问题讨论】:

这不会使它成为有效的 JSON。 你可能从 foreach 循环中调用你的 JSON,所以没有preg_replace是不可能的 【参考方案1】:
vim <file-name>

:%s/$/,/g

删除

:%s/,//g

【讨论】:

【参考方案2】:

下面的sed 脚本有一个地址表达式$!,它匹配不是最后一行的行,还有一个替换操作s/$/,/,它在行尾旁边添加一个逗号。

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

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

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

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

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

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

在第一行(地址表达式1)替换行首的方括号(s/^/[/)。在不是最后一行的行上,添加一个尾随逗号,如上所述。在最后一行(地址表达式$)在行尾添加一个右方括号(s/$/]/)。如果您更喜欢换行符而不是分号,那很好;许多sed 方言还允许您将其拆分为多个-e 参数。

【讨论】:

我想要 -i 但不起作用,这是正确的命令吗? sed -i '$!s/$/,/' file 太棒了!我用这个技巧制作了一个小脚本,将 JSON 行文件导出到 JSON 文件,像这样./jl2json.sh sample.jsonl sample.json 调用它。看这里gist.github.com/mrsarm/24e8531ef8375c768e03d1c1aea67262 @tripleee 有没有这个的 powershell 脚本? @Dip 我不知道,但我想答案是肯定的。 @Dip 你找到在powershell上做的方法了吗?【参考方案3】:

保持简单,只需使用 awk:

$ awk 'printf "%s%s",sep,$0; sep=",\n" ENDprint ""' file
...,
...,
...,
...

【讨论】:

保持简单? sed 的答案对我来说似乎要简单得多。 sed: "除最后一行外的每一行,找到结尾并添加一个逗号。"简单的。 awk:“每一行打印分隔符,然后是行,(等等,为什么要先分隔符?)然后设置分隔符(为什么要包含换行符?哦,必须是记录分隔符......),然后在最后,打印一个空行(什么?哦,向后的 RS/记录打印不会留下尾随的换行符)。你对“简单”的定义很奇怪。 您可能需要在 END 块中添加一些条件代码来处理空文件。 这有点不直观的原因是它利用了awk 不关心变量是否未定义,它只是将其视为空的事实。所以,当第一行被处理时,没有“sep”,所以你不会得到一个开头只有一个逗号的行(正如你对这个脚本的简单阅读所期望的那样。跨度> 这个答案对我帮助很大,因为我已经在一个 awk 程序中,所以 sed 方法不是一个选项。谢谢,埃德!【参考方案4】:

你可以这样使用:

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

这会将行尾替换为“,”并将其写入 file_with_added_commas.txt

更多信息请参考:add text at the end of each line

【讨论】:

这也会在最后一行添加一个逗号,OP 不需要。 这会在文件的所有行中添加一个逗号

以上是关于如何在除最后一行之外的每一行末尾添加逗号?的主要内容,如果未能解决你的问题,请参考以下文章

如何在数据框中的每一行的末尾添加 ****?

如何在 Vim 的每一行末尾添加一个字符串?

如何在unix中的每一行末尾添加文本

HTML/Javascript/jquery 函数按钮在 TextArea 中的每一行末尾放置逗号

Linux:将字数添加到文件的每一行

在 Notepad++ 的每一行末尾添加一个字符 )