如何根据正则表达式删除文本文件指定行,修复不符合要求的JSON行
可行解决方案
你的需求核心是所有以"},结尾的行全部保留,其余行删除,可直接用以下两种方案实现:
方案1:使用sed实现
执行以下命令即可,如需直接修改原文件,可添加-i参数:
# 仅输出处理后内容,不修改原文件 sed '/"},$/!d' test.json # 直接修改原文件 sed -i '/"},$/!d' test.json
命令逻辑说明:/"},$/匹配所有以"},结尾的行,!d表示不删除匹配到的行,其余不符合规则的行全部删除,刚好匹配你的需求。
方案2:使用grep实现(写法更简洁)
如果你不限制工具,用grep实现逻辑更直观:
# 仅输出处理后内容,如需保存到新文件可追加 > new_test.json grep '"},$' test.json
这个命令会直接过滤出所有以"},结尾的行,其余内容直接丢弃,效果和sed方案完全一致。
原命令失效原因
- sed默认使用基础正则表达式(BRE)语法,
+需要转义为\+才能表示「匹配1次及以上」的语义,你写的[^"]+里的+会被当成普通字符匹配,规则自然失效 - 原规则没有绑定行尾匹配,容易误命中行中间的内容,逻辑不符合你的实际需求
内容的提问来源于stack exchange,提问作者Fletchy
相关产品推荐
相关产品推荐

