Вы можете сделать это довольно легко с помощью 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 - Строковые функции
Просмотрите все и дайте мне знать, понял ли я ваш окончательный формат и есть ли у вас дополнительные вопросы.