Получить почтовый адрес отправителя с помощью макроса

Попробуйте это,

Согласноman lscpu

CORE   The logical core number. A core can contain several CPUs.

SOCKET The logical socket number. A socket can contain several cores.

coresи socketsявляются физическими, а CPU(s)— логическими числами. Итак, чтобы узнать количество ядер в вашей системе, выполнитеnumber of cores x number of sockets

Пример вывода lscpuвыглядит следующим образом:

Thread(s) per core:    2
Core(s) per socket:    8
Socket(s):             2

Таким образом, общее количествоcores: 16

Общее количествоCPU(s): 32(Так как количество threadsна coreравно2)

Как упоминал @Durga, nprocдает общее количество CPUs.

Для получения дополнительной информации см. этот ответ , чтобы получить интерпретацию /proc/cpuinfoсм. этот

Хочу поблагодарить @ Кусалананду за помощь в понимании того же .

0
24.09.2019, 16:54
1 ответ

Изmuttrc:

# Avoid the "Press any key to continue..." prompt
set wait_key=no

macro index,pager \cf "|grep -m 1 -oP '(?<=\^From: ).+' | (read after_from; echo \"\$after_from\" | grep -oP '(?<=<)(.+)(?=>)' || echo \"\$after_from\") | xclip -selection c\n" "Yank sender's email to clipboard"

Теперь Ctrl + f помещает адрес электронной почты отправителя в буфер обмена X-системы. Замена xclip -selection cна wl-copyзаставляет его работать с Wayland.

Мы предполагаем, что адрес электронной почты находится в такой строке

From: Firstname Lastname <firstname.lastname@domain.com>

или вот так

From: firstname.lastname@domain.com

Пояснение к макросу:

  • |grep:передать текущую электронную почту в grep.
  • -m 1:grep остановится после того, как совпадет с первой строкой.
  • -o:grep выводит только совпавшую строку, а не всю строку.
  • P:включить Perl-совместимые регулярные выражения в grep. Нам это нужно для просмотра назад в регулярном выражении.
  • '(?<=\^From: ).+':регулярное выражение grep. Получить все символы после строки, начинающейся с «От :». Часть (?<=является положительным просмотром назад , что означает, что строка должна начинаться с «От :», но эта строка не является частью совпадения. Символы, идущие после, являются совпадающей строкой.
  • В этот момент grep выводит либо Firstname Lastname <firstname.lastname@domain.com>, либо firstname.lastname@domain.com.
  • | (read after_from;:Мы передаем эту строку программе read, которая сохраняет строку в переменной after_from. Круглая скобка запускает подоболочку .
  • echo \"\$after_from\" | grep -oP '(?<=<)(.+)(?=>)':Предполагая, что содержимое after_fromравно Firstname Lastname <firstname.lastname@domain.com>, grep извлекает адрес электронной почты firstname.lastname@domain.com. (?=>)— это положительный просмотр вперед :после совпавшей строки должен быть >, но эта закрывающая угловая скобка не является частью совпавшей строки.
  • Если grep успешно (код выхода 0 )сопоставил адрес электронной почты в угловых скобках, мы передаем адрес электронной почты в xclipи готово. \nэквивалентно нажатию Enter , что заставляет Mutt выполнить макрос.
  • С другой стороны, если grep не увенчался успехом, что имеет место в случае, когда часть after_fromуже является адресом электронной почты в формеfirstname.lastname@domain.com(без угловых скобок ), мы просто отправляем этот адрес в буфер обмена с || echo \"\$after_from\") | xclip -selection c. Закрывающая скобка отмечает конец команд, которые мы выполняем в созданной подоболочке. или оператор||означает :Если команда с левой стороны не удалась (не -нулевой код выхода ), выполните команду справа.

Примечание. :Для макроса Mutt мы должны экранировать следующие символы с помощью обратной косой черты. Если вы хотите использовать команду вне Mutt, удалите обратную косую черту :

.
  • ^
  • "
  • $
2
28.01.2020, 03:15

Теги

Похожие вопросы