无需grep -P参数,如何实现相同的JSON索引数值提取效果
问题描述
原本使用以下命令可从目标JSON中提取出数值21:
cat json | grep -Po '(?<=Inne","index":)(.*?)(?=,)'
但我的设备是蓝光播放器的嵌入式系统,不支持grep的-P参数,也无法安装jq,仅能使用grep的-E参数、awk或sed,请问如何实现相同的提取结果?
相关JSON内容如下:
{"success":true,"msg":"","file_path":"","subtitle_list":[{"name":"Wył.","index":0,"selected":false},{"name":"1/21 Duński","index":1,"selected":false},{"name":"2/21 Niemiecki","index":2,"selected":false},{"name":"3/21 Angielski","index":3,"selected":false},{"name":"4/21 Hiszpański","index":4,"selected":false},{"name":"5/21 Francuski","index":5,"selected":false},{"name":"6/21 Włoski","index":6,"selected":false},{"name":"7/21 Niderlandzki","index":7,"selected":false},{"name":"8/21 Norweski","index":8,"selected":false},{"name":"9/21 Fiński","index":9,"selected":false},{"name":"10/21 Szwecki","index":10,"selected":false},{"name":"11/21 Angielski","index":11,"selected":false},{"name":"12/21 Niemiecki","index":12,"selected":false},{"name":"13/21 Angielski","index":13,"selected":false},{"name":"14/21 Hiszpański","index":14,"selected":false},{"name":"15/21 Francuski","index":15,"selected":false},{"name":"16/21 Włoski","index":16,"selected":false},{"name":"17/21 Niemiecki","index":17,"selected":false},{"name":"18/21 Hiszpański","index":18,"selected":false},{"name":"19/21 Francuski","index":19,"selected":false},{"name":"20/21 Włoski","index":20,"selected":false},{"name":"Inne","index":21,"selected":true}]}
解决方案
方法1:使用grep -E
通过扩展正则表达式两次过滤,精准提取目标数值:
grep -E '"name":"Inne","index":[0-9]+' json | grep -Eo '[0-9]+'
方法2:使用awk
匹配包含"name":"Inne"的片段,通过分割字段提取数值:
awk -F '[,:}]' '{for(i=1;i<=NF;i++){if($i~/"name":"Inne"/){print $(i+2)}}}' json
方法3:使用sed
利用替换功能匹配目标片段,仅保留需要的数值:
sed -n 's/.*"name":"Inne","index":\([0-9]*\),.*/\1/p' json
内容的提问来源于stack exchange,提问作者jasko887
相关产品推荐
相关产品推荐

