Извлекайте фразы в bash (используя sed) - PullRequest
2 голосов
/ 19 апреля 2019

Я пытаюсь извлечь некоторые фрагменты JSON-документа, используя регулярные выражения в bash.Моя цель - поймать каждый экземпляр этой фразы и сохранить их в новом файле.Я думал, что 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}

Ожидаетсярезультат для ввода, подобного приведенному выше, выглядит следующим образом:У вас есть идеи, как я могу решить эту проблему?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 19 апреля 2019

Нет, для поиска и замены регулярных выражений в файле / файлах.
Я бы обычно использовал для синтаксического анализа JSON, но ваш образец является недопустимым значением JSON, и я предполагаю, что это ваш фактический ввод, поэтому вместо этого используйте :

$ grep -o '"temp":[0-9.]*' weather.txt > newfile.txt
$ cat newfile.txt
"temp":281.61
"temp":279.9
0 голосов
/ 20 апреля 2019

попробуйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...