Я использую следующую строку атрибуции цитаты по электронной почте:
On dd mmm yyyy hh:mm +hhmm, from [email protected] (Example Dot Org):
где [email protected]
— адрес электронной почты отправителя, Example Dot Org
— настоящее имя отправителя.
Когда настоящее имя не указано (или даже иногда указано), эти два имени идентичны, и в итоге получается следующая строка атрибуции:
On dd mmm yyyy hh:mm +hhmm, from [email protected] ([email protected]):
Если (и только если) это так, я хочу удалить эту часть, оставив только:([email protected])
On dd mmm yyyy hh:mm +hhmm, from [email protected]:
У меня уже есть скрипт оболочки, который вызывает Perl для обработки электронного письма перед отправкой его моему редактору, и я думаю, что я мог бы просто добавить к нему код, чтобы также обрабатывать строку атрибуции. Решение может быть сделано на Perl, awk, sed или чем-то еще (хотя предпочтительнее не чем-тослишкомэкзотика).
Я знаю, что строка атрибуции — это первая непустая строка, следующая за первой пустой строкой ввода, и я не против жесткого кодирования против моего предпочтительного формата строки атрибуции. Простое удаление части в скобках — тривиальная задача, нокак это сделать только тогда, когда оно равно тому, что ему предшествует?Желательно, не рискуя изменить что-либо еще в письме (текстовом файле).
решение1
Просто замените подстроку, содержащую два вхождения адреса, на первую половину подстроки, содержащую только один адрес:
bash-4.2$ echo '
On dd mmm yyyy hh:mm +hhmm, from [email protected] (Example Dot Org):
On dd mmm yyyy hh:mm +hhmm, from [email protected] ([email protected]):
On dd mmm yyyy hh:mm +hhmm, from [email protected]:
' | sed -r 's/(, from (\S+)) \(\2\)/\1/'
On dd mmm yyyy hh:mm +hhmm, from [email protected] (Example Dot Org):
On dd mmm yyyy hh:mm +hhmm, from [email protected]:
On dd mmm yyyy hh:mm +hhmm, from [email protected]:
решение2
perl -lane 'print "($F[07]):" eq "$F[8]" ? "@F[0..7]:" : "@F"'
Этот однострочный код Perl разделит строку по пробелам, так что следующая строка будет разделена на 9 частей:
On dd mmm yyyy hh:mm +hhmm, from [email protected] ([email protected]):
Он сравнит часть 8 (адрес электронной почты) с частью 9 (имя отправителя), и если они совпадают, то часть 8 будет удалена. Оставив вам:
On dd mmm yyyy hh:mm +hhmm, from [email protected]: