grep可匹配json异常行尾标点,需转义符号并锚定行尾:逗号结尾用,\s*$,冒号用:\s*$,左括号用{\s*$,多符号合并为[{:\[,\]\s*$,配合-v排除空行和注释,再用jq校验准确性。

直接用 grep 匹配行尾是特定标点(如逗号、冒号、左括号等)的 JSON 异常行,关键在于正确转义标点、锚定行尾,并注意 JSON 常见非法结尾场景。
匹配行尾为逗号的 JSON 行
JSON 数组或对象中,字段或元素后误加逗号是典型错误(尤其在最后一项)。这类行以逗号结尾,但 JSON 标准不允许末尾逗号。
- 命令:
grep ',s*$' file.json -
,s*$表示逗号后可跟零个或多个空白字符(空格、制表符),再到达行尾 - 加
-n显示行号:grep -n ',s*$' file.json
匹配行尾为冒号或左括号的 JSON 行
冒号结尾通常表示键名后缺值(如 "name":),左括号结尾可能是对象开头写错位置(如孤立的 { 行)。
- 匹配冒号结尾:
grep ':s*$' file.json - 匹配左花括号结尾:
grep '{s*$' file.json - 同时匹配多个符号(冒号、逗号、左括号、左方括号):
grep '[:{[,]s*$' file.json(注意[在字符类中需转义或放首位)
排除注释和空行干扰
真实 JSON 文件可能混有注释(非标准但常见)或空行,直接 grep 可能误报。建议先过滤有效数据行。
- 跳过空行和纯空白行:
grep -v '^s*$' file.json | grep '[:{[,]s*$' - 跳过以
//或/*开头的伪注释行(若存在):grep -v '^s*//|^s*/*' file.json | grep ':s*$'
结合 JSON 校验提高准确性
grep 只能发现明显语法尾巴问题,不能替代完整校验。发现可疑行后,建议用工具确认是否真为异常:
- 用
jq empty检查整个文件是否合法:jq empty file.json 2>/dev/null || echo "JSON 无效" - 定位具体错误位置:
jq -n -f file.json 2>&1 | head -5(部分版本支持) - 对 grep 出的行做局部检查:
sed -n '15p' file.json | jq . 2>/dev/null || echo "第15行解析失败"











