提取bash中的短语(使用sed)

时间:2019-04-19 16:37:16

标签: bash sed

我正在尝试使用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

尽管尝试了不同的变体,但仍然不正确。 你有什么想法我可以解决这个问题吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

否,用于搜索和替换文件中的正则表达式。
我通常会使用来解析JSON,但您的示例是无效的JSON值,并且我想您的实际输入也是这样,因此,请改用

$ 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