заменить поле yaml содержимым файла

Для gpg версии 2.x вам не нужно использовать --batch, просто

--pinentry-mode loopback  

работает с --passphraseи --passphrase-fileи позволит вам ввести новую информацию, например, в случае конфликта имен файлов:

gpg --pinentry-mode loopback --passphrase-file=file encrypted.gpg

...
File 'encrypted' exists. Overwrite? (y/N)n
Enter new filename: f2

в отличие от --batch, который быстро выйдет из строя, говоря...failed: File exists

(проверено на Debian Stable/Stretch gpg 2.1.18. Такое поведение игнорирования важных --passphraseопций действительно должно быть ошибкой, если это уже не так)

0
21.01.2020, 18:27
2 ответа

Awk подход:

awk '$1=="keyword:"{ getline k < "file2"; print $1, "\047" k "\047"; next }1' file1

Выход:

not_keyword: 'something'
keyword: 'condition 1 condition 2 condition 3'
another_not_keyword: 'something'

Как вариант использования sedв -замена места:

$ sed -Ei "s/^(keyword: ).*/\1'$(cat file2)'/" file1
1
28.01.2020, 02:38
$ cat tst.awk
NR == FNR {
    new = (NR>1 ? new ORS : "") $0
    next
}
$1 == "keyword:" {
    $0 = $1 OFS "\047" new "\047"
}
{ print }

$ awk -f tst.awk file2 file1
not_keyword: 'something'
keyword: 'condition 1 condition 2 condition 3'
another_not_keyword: 'something'
1
28.01.2020, 02:38

Теги

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