我在下面列出的其他帖子中找了解我的问题的解决方案,但看起来我的正则表达式不同,需要特别小心: How to output only captured groups with sed Replace one capture group with another with GNU sed (macOS) 4.4 sed replace line with capture groups
我正在尝试替换大JSON文件中的正则表达式匹配组, 我的文件有mongoDB导出的对象,我正在尝试用string:
替换objectId{"_id":{"$oid":"56cad2ce0481320c111d2313"},"recordId":{"$oid":"56cad2ce0481320c111d2313"}}
因此原始文件中的输出应如下所示: { “_id”: “56cad2ce0481320c111d2313”, “的recordId”: “56cad2ce0481320c111d2313”}
这是我在shell中运行的命令:
sed -i 's/(?:{"\$oid":)("\w+")}/\$1/g' data.json
我没有收到错误,但文件保持不变。 我究竟做错了什么?
答案 0 :(得分:0)
最后我设法让它工作,正则表达式在bash中的工作方式与regexr.com测试工具不同。
echo '{"$oid":"56cad2ce0481320c111d2313"}' | sed 's/{"$oid":\("\w*"\)}/\1/g'
给出正确的输出:
"56cad2ce0481320c111d2313"
我发现从stdin读取并输出到文件更好,而不是先写入JSON文件,然后再读取,替换和写入。
由于我使用mongoexport导出集合,替换objectId并将输出写入JSON文件,我的最终解决方案如下所示:
mongoexport --host localhost --db myDB --collection my_collection | sed 's/{"$oid":\\("\\w*"\\)}/\\1/g' >> data.json