Как искать строки для определенного профиля, начиная с [по умолчанию]

только что заработало, postgres pgdumpallв файл 7zip :используйте set pgpassword=xxxxxперед вводом команды:

pg_dumpall -U postgres | c:\"program files"\7-Zip\7z.exe a -si e:\directory\output.file.sqlc

на его сброс и сжатие ушло всего 4 дня! 50201104790 байт (47 ГБ)

-1
17.09.2020, 16:45
3 ответа

Если профили разделены пустыми -, то вы можете использовать awk в режиме абзаца напр.

$ awk -v RS= -v p='[uat]' '$1 == p' yourfile
[uat]
region = us-east-2
output = json
3
18.03.2021, 23:04

Perl в «режиме абзаца»:

$ perl -00 -ne 'print if /\[default\]/' file 
[default]
region = us-east-1
output = json

или

$ perl -00 -ne 'print if /\[prod\]/' file 
[prod]
region = us-east-1
output = json

Вы можете превратить это в функцию оболочки, добавив эти строки в файл инициализации вашей оболочки (, например~/.bashrc):

searchawsconfig(){
    perl -00 -ne 'print if /\['"$1"'\]/' "$2" 
}

Затем вы можете:

$ searchawsconfig prod file 
[prod]
region = us-east-1
output = json
2
18.03.2021, 23:04

реферат:

awk '$1==p' RS= p='[default]'./tst

Использование режима абзаца для разделения входного файла на записи, разделенные "пустой строкой" (на две последовательные\n).

Вы можете выполнить сопоставление с регулярным выражением с помощью (экранирования [], поскольку они являются специальными в регулярном выражении)(используйте ^для обозначения начала строки):

awk -vRS='' '/^\[default\]/'./tst

Или вы можете выполнить сопоставление текста (полный первая строка )с:

awk -vRS='' '$1 == "[default]"'./tst

Или (более гибко )использовать переменные, установленные в командной строке:

awk '$1==p' RS= p='[default]'./tst

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

Или, используя переменные окружения:

RS='' SECTION='default'   \
    awk   'BEGIN{RS=ENVIRON["RS"]} $1=="[" ENVIRON["SECTION"] "]" ' \
       ./tst
1
18.03.2021, 23:04

Теги

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