Для 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
опций действительно должно быть ошибкой, если это уже не так)
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
$ 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'