Как подготовить переменный контент для рассылки почты в bash? (MacOS) - PullRequest
0 голосов
/ 08 мая 2020

Допустим, у нас есть два файла типа .txt.

Student.txt Содержит несколько строк, которые выглядят следующим образом:

name.surname@xyz.com passwordText securityCode

Файл 2 - это место, где выполняется сценарий.

Теперь предположим, что у нас есть какая-то форма электронной почты вроде этой:

from: leorge gukas <lgukas@xyz.com>
to: $studentName $studentSurname <$studentMail>

your password is $studentPassword and your confirmation code is $securityCode

Как будет выглядеть скрипт, который может это сделать? Имейте в виду, что у нас несколько студентов, а не один.

Мы не отправляем письма, мы просто создаем новый текстиль, который содержит все созданные электронные письма

1 Ответ

2 голосов
/ 08 мая 2020

Вы можете сделать это довольно легко с помощью awk. Вы разделяете свои входные записи на использование разделителя полей по умолчанию. Единственная проблема - разделить поле-1 на name, surname. Есть несколько способов сделать это, один из самых простых и переносимых - просто позвонить sub 3 раза, чтобы сначала удалить все, кроме имени. Чтобы набрать surname, необходимо два звонка на sub. Первый удаляет все от '@' до конца, а следующий удаляет name, оставляя surname. Тогда это просто вопрос вывода в указанном вами формате формы.

Вы можете сделать это с помощью:

awk '{
    email = name = surname = $1
    sub(/[.].*$/,"",name)
    sub(/@.*$/,"",surname)
    sub(/^.*[.]/,"",surname)
    print "from: leorge gukas <lgukas@xyz.com>\nto: " name " " surname " <" email ">\n\nyour password is " $2 " and your confirmation code is " $3
}' file

(для проверки вы можете просто выбрать-скопировать, а затем среднюю мышь вставьте в xterm с текущим рабочим каталогом, содержащим file, содержащий исходные строки "name.surname@xyz.com passwordText securityCode" - замените file на любое ваше фактическое имя файла)

, который будет обрабатывать каждую строку в file в результате получается четыре строки вывода:

from: leorge gukas <lgukas@xyz.com>
to: name surname <name.surname@xyz.com>

your password is passwordText and your confirmation code is securityCode

Или, например, если вы передали другую строку, чтобы показать использование разных имен входных данных для команды, например:

echo "mickey.mouse@disney.com mouseWord Pluto" | awk '{...}'

Вы получите :

from: leorge gukas <lgukas@xyz.com>
to: mickey mouse <mickey.mouse@disney.com>

your password is mouseWord and your confirmation code is Pluto

Подробнее о команде awk sub см. Руководство пользователя Gawk - Строковые функции

Просмотрите все и дайте мне знать, понял ли я ваш окончательный формат и есть ли у вас дополнительные вопросы.

...