JQ Получить значение ключа совпадающей без учета регистра строки - PullRequest
2 голосов
/ 29 января 2020

Я пытаюсь получить определенные данные c из поля "id", но совпадения jq чувствительны к регистру и создают проблему с поиском (в основном не совпадают, поэтому возвращают 0 результатов).

JSON Пример:

{
  "created_at": "2020-01-17T12:54:02Z",
  "primary": true,
  "verified": true,
  "deliverable_state": "deliverable",
  "undeliverable_count": 0,
  "updated_at": "2020-01-17T12:54:03Z",
  "url": "http://www.website.com",
  "id": 376062709553,
  "user_id": 374002305374,
  "type": "email",
  "value": "test-1234567@domain.com"
}
{
  "created_at": "2019-02-07T20:49:41Z",
  "primary": false,
  "verified": true,
  "deliverable_state": "deliverable",
  "undeliverable_count": 0,
  "updated_at": "2019-02-07T20:49:41Z",
  "url": "http://www.website.com",
  "id": 366235941554,
  "user_id": 374002305374,
  "type": "email",
  "value": "MyEmail@domain.com"
}

При выполнении jq со следующими данными я получаю правильный возврат:

$ jq -r '. | select(.value=="MyEmail@domain.com") .id' sample.json
366235941554

Но если я запускаю с неправильным case, например.

$ jq -r '. | select(.value=="Myemail@domain.com") .id' sample.json

... Я не получаю результат. Я прочитал некоторую документацию, но, к сожалению, я не понимаю флаги test / match / capture для нечувствительного поиска (https://stedolan.github.io/jq/manual/#RegularexpressionsPCRE) или как заставить его работать с этим «найти и дать» мне значение "request.

Я, казалось бы, искал повсюду, но не могу найти никаких примеров того, как это используется.

1 Ответ

3 голосов
/ 29 января 2020

Для этого вам не нужно регулярное выражение.

select(.value | ascii_downcase == "myemail@domain.com") .id

Но если вы настаиваете на этом, ниже показано, как выполнить сопоставление без учета регистра, используя test/2.

select(.value | test("MyEmail@domain.com"; "i")) .id
...