Учитывая, что ваш JSON хранится в переменной с именем json, вы можете сделать следующее в подсказке shell:
$ echo "$json" | jq '.client.state | test("tiling")'
false
Это правильно возвращает false, потому что ваш корпус содержит значение floating
вместо этого.
В качестве альтернативы, если вы хотите проверить, что значение not tiling
, вы можете использовать фильтр | not
, чтобы отрицать логику вашего теста. Например:
$ echo "$json" | jq '.client.state | test("tiling") | not'
true
Это правильно возвращает true, потому что состояние клиента не плиточное
, а плавающее
.
Если вы хотите убедиться, что ваши фильтры работают в нормальном режиме, вы также можете использовать jq для извлечения значения для вложенного ключа. Например:
$ echo "$json" | jq .client.state
"floating"
Затем вы можете использовать эту информацию для проверки ваших тестов и фильтров, или просто передать ее по shell-конвейеру в fgrep
или fgrep -v
, если вы не против породить дополнительный процесс.
В зависимости от того, какую оболочку вы используете, вы можете сделать это с помощью подстановки.
#! /bin/bash -
shopt -s nullglob extglob
dirs=(/application/DB/presto/presto-server-+([[:digit:]])*(.+([[:digit:]])))
printf '%s\n' "Found ${#dirs[@]} matching directories:" "${dirs[@]}"
#! /bin/zsh -
set -o extendedglob
dirs=(/application/DB/presto/presto-server-<->(.<->)#(N))
printf '%s\n' "Found $#dirs matching directories:" $dirs
#! /bin/ksh93
dirs=(~(N)/application/DB/presto/presto-server-+([[:digit:]])*(.+([[:digit:]])))
printf '%s\n' "Found ${#dirs[@]} matching directories:" "${dirs[@]}"
Для всех это presto-server-
, за которым следует последовательность из 1 или более цифр, за которой следует 0 или более последовательностей .<digits>
.
С помощью теста GNU find -regex
вы можете использовать:
find /application/DB/presto/ -regex '/application/DB/presto/presto-server-\([0-9]*\.\)?[0-9]+'
... для этого требуется начальный путь, а затем числовая часть:
Это соответствует всем и только вашим «правильным» примерам и ни одному из ваших «недопустимых» примеров.
Измените [0-9]*
на [0-9]+
, если вы хотите, чтобы перед любым начальным периодом требовалась цифра; разница между:
/application/DB/presto/presto-server-0.936
и
/application/DB/presto/presto-server-.936