我创建了一个文件,我需要用“”替换最后一个“,”,这样它才是有效的JSON。问题是我不知道如何用sed
或者甚至用grep
/piping来做这件事。我真的被难住了。任何帮助都将不胜感激。
test.json
[
{MANY OTHER RECORDS, MAKING FILE 3.5Gig (making sed fail because of memory, so newlines were added)},
{"ID":"57705e4a-158c-4d4e-9e07-94892acd98aa","USERNAME":"jmael","LOGINTIMESTAMP":"2021-11-30"},
{"ID":"b8b67609-50ed-4cdc-bbb4-622c7e6a8cd2","USERNAME":"henrydo","LOGINTIMESTAMP":"2021-12-15"},
{"ID":"a44973d0-0ec1-4252-b9e6-2fd7566c6f7d","USERNAME":"null","LOGINTIMESTAMP":"2021-10-31"},
]
当然,将grep
与-P
一起使用符合我需要替换的内容
grep -Pzo '"},\n]' test.json
4条答案
按热度按时间6psbrbz91#
一个有效的解决方案是使用
perl
来读取文件的最后n
字节,然后确定这些字节中多余逗号的位置(例如,使用正则表达式),然后用空格字符替换此逗号:这个解决方案的优点是它只读取文件的几个字节来进行替换**=〉**这使得内存消耗几乎为0,并且避免了阅读整个文件。
pgvzfuti2#
使用GNU
sed
vwkv1x7d3#
使用GNU sed删除文件中的最后一个逗号:
输出到标准输出:
请参阅:
man sed
和The Stack Overflow Regular Expressions FAQhec6srdp4#
所以下面是我用的最后一个解决方案,不是最漂亮的,但它没有内存问题,它做了我需要的。感谢Cyrus的帮助。希望这能帮助一些人。