如何删除文件中最后一个出现的逗号且不删除整行内容?
删除数组结构闭合符前最后一个多余逗号的实现方法
直接用命令行工具就能实现,不需要写复杂脚本,以下两种方案都不依赖固定行号,不会误删内容、不会删除整行,适配任意长度的数组结构:
- sed 方案(支持原地修改文件)
直接执行以下命令,把命令里的目标文件路径换成你实际要处理的文件即可:
实现逻辑:通过滑动窗口逐行匹配相邻两行的内容,只要识别到「上一行末尾带逗号,下一行是单独的sed -i '$!N; /^\(.*\),\n]$/s//\1\n]/; P;D' 目标文件路径]数组闭合符」的组合,就自动删除上一行末尾的逗号,其他位置的逗号完全不受影响。
小提示:如果是macOS系统使用sed原地修改,需要把-i改成-i '',BSD版sed要求-i参数必须指定备份后缀,传入空字符串即代表不生成备份文件。 - awk 方案(适合需要自定义扩展逻辑的场景)
如果习惯用awk处理文本,可以执行以下命令,需要原地修改的话可以把输出重定向到临时文件再替换原文件:
实现逻辑:逐行缓存上一行内容,当读到当前行是数组闭合符awk 'NR>1{if(/^]$/) sub(/,$/,"",prev); print prev} {prev=$0} END{print prev}' 目标文件路径]时,先把缓存的上一行(也就是最后一个数组元素行)末尾的逗号删掉再输出,其余行正常输出,精准定位要删除的逗号位置。
两种方案都经过实测,针对给出的示例结构处理效果完全符合预期:
处理前结构:[ {[ ...,..., ]}, {[ ...,..., ]}, {[ ...,..., ]}, {[ ...,..., ]}, ]处理后结构:
[ {[ ...,..., ]}, {[ ...,..., ]}, {[ ...,..., ]}, {[ ...,..., ]} ]
内容的提问来源于stack exchange,提问作者code_fodder
相关产品推荐
相关产品推荐

