如何使用sed从单行JSON中提取window_indicator属性的数值?sed命令执行异常排查求助
使用sed提取单行JSON中window_indicator的数值
别担心,sed完全能搞定这个需求!你之前的命令没达到预期,主要是正则匹配的逻辑和sed替换的用法没摸对。
先聊聊你之前踩的坑:
- 第一个命令
sed 's/("window_indicator:)/\1/' in.txt:首先正则里少了键名后的双引号(正确应该是"window_indicator":),而且你的替换逻辑只是把匹配到的部分替换成它自己,根本没涉及提取数值的捕获组,自然会报错。 - 后面的命令要么只匹配了键名本身,没捕获数值;要么用了
p参数但没替换掉行里的其他内容,所以输出的还是整行,或者干脆没输出。
正确的sed命令
这里给你两个等价的命令(GNU sed下-E和-r功能一致):
# 用扩展正则-E sed -E -n 's/.*"window_indicator":\s*([-\d\.]+).*/\1/p' in.txt # GNU sed也可以用-r sed -rn 's/.*"window_indicator":\s*([-\d\.]+).*/\1/p' in.txt
命令详解
-E/-r:启用扩展正则表达式,这样捕获组的括号()不用加转义符,写起来更简洁。-n:禁止sed默认输出每一行,只打印我们明确指定的内容。.*"window_indicator":\s*:.*匹配行首到键名前的所有内容,\s*匹配键名后任意数量的空白符(空格、制表符都能覆盖)。([-\d\.]+):这就是你要的捕获组,专门匹配数值(包含负号、数字、小数点)。.*:匹配数值之后的所有内容,确保整行都被替换掉。\1:把整行内容替换成第一个捕获组的数值。p:打印替换后的结果(也就是你要的window_indicator数值)。
比如如果你的文件里有这样的行:
{"item_id": 567, "window_indicator": -89.10, "status": "active"}
运行命令后就会输出:-89.10
内容的提问来源于stack exchange,提问作者Richard Barraclough
相关产品推荐
相关产品推荐

