polkit rule: определите, является ли пользователь администратором?

Удалите \ n после имени папки, чтобы вы искали команду

macro  index s ":set confirmappend=no delete=yes auto_tag=yes\n\
<save-message>=archive<sync-mailbox>:set delete=ask-yes\n"
1
26.04.2019, 09:22
1 ответ

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

jq -r '. as $root |
       path(..) |. as $path |
       $root | getpath($path) as $value |
       select($value | scalars) |
       ([$path[] | @json] | join(".")) + " = " + ($value | @json)
    ' < file.json

Он использует оператор привязки переменных... as $identifier |несколько раз, чтобы запомнить вычисляемые значения по имени -некоторые из них не нужны, но они облегчают обсуждение. Каждая из этих строк связывает переменную $xдля оставшейся части программы со значением слева.

Функцияpath/1является ключевой здесь и делает в основном то, что вы хотите уже:path(..)создает массив всех ключей, которые вам нужно пройти, чтобы добраться до каждого значения, вложенного в объект. Каждый путь имеет вид

[ "Blueprints", "security", "kerberos_descriptor" ]

и их можно использовать так же, как и другие массивы, а также со специальными функциями, интерпретирующими пути.

path(..) |. as $path |

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

getpathсчитывает один из этих массивов путей и извлекает идентифицируемое им значение.selectпозволяет нам фильтровать только те значения, которые проходят тест -здесь выбираются только значения, которые являются скалярами(числами, строками, логическими значениями или нулями ), поэтому промежуточные объекты и массивы не учитываются (, как и нули ).

Последняя строка форматирует вывод как

"abc"."def".3."xyz" = true

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

@jsonкорректно заключает значения в кавычки, а остальные должны быть легко изменены в соответствии с нужным вам форматом. Он не использует квадратные скобки для массивов, потому что вручную воспроизвести функциональность joinдля расстановки точек для других случаев на удивление сложно. Скобки нужны с обеих сторон.

9
27.01.2020, 23:22

Теги

Похожие вопросы