我正在尝试使用bash中的正则表达式提取JSON文档的某些片段。我的目标是捕获该短语的每个实例并将其保存在新文件中。我认为sed是执行此类任务的好工具。
我已经尝试过这样的事情:
sed '"temp":[0-9]+\.[0-9]*' weather.txt >> newFile.txt
weather.txt示例:
{"temp":281.61,"temp_min":280.005,"temp_max":281.61,"pressure":1033.941,"sea_level":1033.941,"grnd_level":1024.038,"humidity":57,"temp_kf":1.6},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"clouds":{"all":0},"wind":{"speed":2.19,"deg":6.817},"sys":{"pod":"n"},"dt_txt":"2019-04-19 18:00:00"},{"dt":1555707600,"main":{"temp":279.9,"temp_min":278.7,"temp_max":279.9,"pressure":1034.219,"sea_level":1034.219,"grnd_level":1024.211,"humidity":64,"temp_kf":1.2}
上述输入的预期结果是::
"temp":281.61
"temp":279.9
尽管尝试了不同的变体,但仍然不正确。 你有什么想法我可以解决这个问题吗?
谢谢。
答案 0 :(得分:2)
否,sed用于搜索和替换文件中的正则表达式。
我通常会使用jq来解析JSON,但您的示例是无效的JSON值,并且我想您的实际输入也是这样,因此,请改用grep:
$ grep -o '"temp":[0-9.]*' weather.txt > newfile.txt
$ cat newfile.txt
"temp":281.61
"temp":279.9
答案 1 :(得分:0)
尝试gnu sed
sed -En 's/"temp":\s*[0-9.]+/\n&\n/g; s/[^\n]*(\n("temp":\s*[0-9.]+)|\s*$)/\2/gp' weather.txt >> newFile.txt