Найдите шаблон блока во многих различных файлах и выборочно извлеките из него определенные строки.

Давайте разберем это.

Umask=задокументировано в man systemd.exec. Вы можете узнать, на какой справочной странице он задокументирован, проверив man systemd.directives. Это задокументировано как:

"Controls the file mode creation mask. "

Вывод, который вы видите в /proc/<pid>/status, задокументирован в man proc. Это задокументировано как:

"Process umask".

Итак, во-первых, неясно, является ли то, что вы проверяете, правильной проверкой установленной вами директивы systemd. Лучшим тестом будет просмотр файла, созданного Docker. Как был создан umask?

Во-вторых, убедитесь, что ваша директива systemdдействительно вступила в силу. Просмотрите вывод:

 systemd-analyze dump

Найдите в выходных данных Docker, и оттуда вы сможете найти Umask, который systemdустановил для службы Docker. Видит ли systemdваш umaskтак, как вы ожидаете?

Ваш синтаксис systemdкажется правильным, поэтому я думаю, что это может быть неправильное понимание того, что делает директива Umask=.

0
15.12.2019, 00:14
1 ответ

Я думаю, вы можете использовать комбинацию sedи grep.

Предположим, что все ваши каталоги 0, 1, 2,... находятся в /your/path(, например./your/path/0/data.dat):

for dir in /your/path/*; do
    idx=$(basename ${dir})
    sed -n '/Configurations for Sm:/,/Configurations for/p' ${dir}/data.dat | \
        grep '^ \+0 \+1' | \
        sed "s/^/${idx}/" >> "0-1.dat"
done

Первый sedдолжен извлекать только интересующую часть файла (между двумя шаблонами Configurations for Sm:и Configurations for)

.

grepсоответствует 0 1в начале строки (с положительным числом пробелов в -между)

Второй sed добавляет «индекс» (имя каталога )в начале строки.

Вывод добавляется(>>)к "0 -1.dat".

Вы можете добавить внешний цикл для проверки различных комбинаций 0и 1.

Примечание. :Я не проверял это должным образом.

1
28.01.2020, 02:29

Теги

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