如何用grep命令从$result变量的JSON中筛选出Terry的id?
筛选Terry对应id的实现方案
优先使用grep的方法
由于grep并非JSON专用处理工具,需要依赖当前JSON的换行格式来实现匹配:
- 第一步,定位包含"Terry"的对象块:
echo "$result" | grep -B2 -A0 '"name":"Terry"'
参数说明:-B2 会取匹配行的前2行,确保拿到对应的id行;-A0 表示不获取匹配行之后的内容。
- 第二步,提取具体的id数值:
echo "$result" | grep -B2 '"name":"Terry"' | grep -oP '"id":\K\d+'
参数说明:
-oP启用Perl兼容正则表达式,只输出匹配到的内容"\K\d+"表示忽略"id":这部分内容,只提取后面的数字(即id的值)
更可靠的备选方案(JSON专用工具jq)
如果JSON的格式可能发生变化(比如键值对同行排列),grep的方法会失效,此时推荐用jq工具,它是专门处理JSON的工具,语法更稳定:
echo "$result" | jq '.value[] | select(.name == "Terry") | .id'
内容的提问来源于stack exchange,提问作者wonderfulworldwithcharity
相关产品推荐
相关产品推荐

