BASH - парсинг значений из однострочного файла базы данных ( - PullRequest
1 голос
/ 12 августа 2011

я пытаюсь проанализировать файл базы данных, полученный с веб-сайта через curl, однако у меня возникают проблемы при попытке выяснить, как получить значения.

Это пример файла

{"Databasename":[{"Var1":"Var1Value","Var2":"Var2Value","Var3":"Var3Value"},{"Var1b":"Var1bValue","Var2b":"Var2bValue","Var3b":"Var3bValue"}],"foldername":{"dbTblcountvar":"dbTblcountvalue","filecountsize":"filecountsizvalue"}}

и с разрывом строки для лучшей читаемости

{
 "Databasename":
 [
  {
   "Var1":"Var1aValue",
   "Var2":"Var2aValue",
   "Var3":"Var3aValue"
  },
  {
   "Var1":"Var1bValue",
   "Var2":"Var2bValue",
   "Var3":"Var3bValue"
  },
  {
   "Var1":"Var1cValue",
   "Var2":"Var2cValue",
   "Var3":"Var3cValue"
  }
 ],
"foldername":
  {
  "dbTblcountvar":"dbTblcountvalue",
  "filecountsize":"filecountsizvalue"
 }
}

при условии, что Var2 всегда постоянен, как я могу получить его значение?(Var2aValue, Var2bValue, Var2cValue, Var2dValue, .....)

В приведенном выше примере значение, которое я пытаюсь получить, - это идентификатор файла, который мне нужно отправить обратно на сервер, чтобы загрузить файл,и выполнять другие операции над ним.

Спасибо

1 Ответ

2 голосов
/ 12 августа 2011
cat DownloadedFile.Ext | perl -pe 's/"Var2[abc]?":"(.+?)(?<![\\])"/\n\1\n/g' | grep -vPe '(?<!\\)"'

Эти команды сначала помещают Var2 (с необязательными a, b или c после) в новую строку, а затем фильтруют все строки, которые имеют ". Я предполагаю, что это файл json, поэтому я избегаю сопоставления escape-символов с этой частью регулярного выражения:

(?<!\\)
...