В простом примере, который вы показываете, когда каждое из целевых слов появляется в файле только один раз, вы можете просто сделать:
$ paste fileB fileC | while read a b; do sed -i "s/$a/$b/" fileA; done
$ cat fileA
Hello John, how is your wife? where is grandpa?
Команда paste
распечатает данные из обоих файлов вместе:
$ paste fileB fileC
Peter John
dad wife
mom grandpa
Мы передаем это через простой цикл при чтении
, который будет перебирать каждую строку, сохраняя значение из fileB
как $ a
и значение из fileC
как $ b
. Затем команда sed
заменит первое вхождение $ a
на $ b
. Это повторяется трижды.
Этот подход хорош, если вы знаете, что ваши целевые слова появляются в файле только один раз (они должны быть, иначе вам нужно будет предоставить более подробную информацию, которую мы можем использовать, чтобы определить, какое вхождение следует заменить), и если ваш файлы крошечные, как то, что вы показали. Для больших файлов это займет много времени и очень неэффективно, так как его нужно будет запускать один раз для каждой пары слов.
Итак, если у вас есть файлы большего размера, вам может потребоваться что-то вроде этого:
paste fileB fileC |
perl -lane '$words{$F[0]}=$F[1]}
END{open(A,"fileA"); while(<A>){s/$_/$words{$_}/ for keys %words; print}'
Используйте одну из опций - passphrase -...
в пакетном режиме:
- passphrase-fd
читает кодовую фразу из заданного файлового дескриптора
echo mysuperpassphrase | gpg --batch -c --passphrase-fd 0 файл
- файл-пароль
читает кодовую фразу из заданного файла
echo mysuperpassphrase> passphrase
gpg - -batch -c --passphrase-file файл парольной фразы
- парольная фраза
использует заданную строку
gpg --batch -c --passphrase файл mysuperpassphrase
Все они зашифруют файл
(в file.gpg
) с использованием mysuperpassphrase
.