Вам необходимо добавить эту конфигурацию в отдельный файл с именем карта виртуальных почтовых ящиков .
См. документацию:
Postfix needs to lookup if the recipient domains exist. Otherwise, Postfix will reject your DBMail recipients with a “User unknown in local recipient table” error.
To do this, you need to enable the MySQL- or PGSQL-module in Postfix and add
virtual_mailbox_domains = mysql:/etc/postfix/sql-virtual_mailbox_domains.cf
After that create the file and add the following MySQL-statements (adjust it to your needs if you use Postgres):
user = <SQL-username>
password = <SQL-password>
hosts = <SQL-host>
dbname = <SQL-database>
query = SELECT DISTINCT 1 FROM dbmail_aliases WHERE
SUBSTRING_INDEX(alias, '@', -1) = '%s';
Подведение итогов:
1)Создать файл:
nano /etc/postfix/sql-virtual_mailbox_domains.cf
2)Добавить в этот файл инструкции MySQL -выше
3)Удалить операторы MySQL -из /etc/postfix/main.cf
4)Добавить в /etc/postfix/main.cf параметр и сохранить изменения:
virtual_mailbox_domains = mysql:/etc/postfix/sql-virtual_mailbox_domains.cf
5)Перезагрузить конфигурацию или перезапустить Postfix:
service postfix reload
service postfix restart
Я думаю, что ваши требования требуют повторения ключевых слов. Я бы порекомендовал следующий сценарий оболочки -(, хотя вы можете вместить его в один -лайнер, если хотите):
#!/bin/bash
while read keyword
do
# Apply grep, but store result in variable
MATCH="$(grep $keyword genome.xls)"
# If grep result is an empty string, output an empty line,
# otherwise the grep result as-is.
if [[ -z "$MATCH" ]]
then
echo
else
echo "$MATCH"
fi
done < id.txt
Зациклив содержимое id.txt
, вы можете обеспечить упорядоченность вывода.
Вызов сценария с помощью
user@host$./extract_lines.sh > result.xml
Чтобы сделать скрипт более гибким, мы можем сделать обрабатываемый файл аргументом строки команды -или даже списком аргументов строки команды -:
#!/bin/bash
if [[ "$#" == "0" ]]
then
echo "Usage: $0 <filename(s)>"
exit 1
fi
for file in "$@"
do
outfile=${file/.xls/_result.xls}
:>$outfile
echo "Process $file, write results to $outfile"
while read keyword
do
# Apply grep, but store result in variable
MATCH="$(grep $keyword $file)"
# If grep result is an empty string, output an empty line,
# otherwise the grep result as-is.
if [[ -z "$MATCH" ]]
then
echo "" >> $outfile
else
echo "$MATCH" >> $outfile
fi
done < id.txt
done
Это зациклит все файлы, указанные как аргументы строки команды -(и будь то *.xls
), и запишет результаты в <input_filename>_result.xls
.
Обратите внимание , однако, что этот синтаксис является несколько рудиментарным в том смысле, что вы не должны смешивать спецификации имени файла с "globs" (, т. е. подстановочными знаками, такими как *
), и обычными именами файлов в вашем списке аргументов.
Попробуйте это,
while read a ; do grep "$a" genome.xls || printf "\n" ; done < id.txt
NC_0208.1 18839 86123 prot4_A0A0 1 79 137
NC_0208.4 29761 74985 lip10_H8FLU5 2 393 48
NC_0208.2 29687 67745 lysin6_A0A0Q5 5 38 49
NC_0208.1 18918 94692 amyl4_A0A0H 1 54 194