Попробуйте это,
Согласно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
см. этот
Хочу поблагодарить @ Кусалананду за помощь в понимании того же .
Из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. Получить все символы после строки, начинающейся с «От :». Часть (?<=
является положительным просмотром назад , что означает, что строка должна начинаться с «От :», но эта строка не является частью совпадения. Символы, идущие после, являются совпадающей строкой. 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
. (?=>)
— это положительный просмотр вперед :после совпавшей строки должен быть >
, но эта закрывающая угловая скобка не является частью совпавшей строки. xclip
и готово. \n
эквивалентно нажатию Enter , что заставляет Mutt выполнить макрос. after_from
уже является адресом электронной почты в формеfirstname.lastname@domain.com
(без угловых скобок ), мы просто отправляем этот адрес в буфер обмена с || echo \"\$after_from\") | xclip -selection c
. Закрывающая скобка отмечает конец команд, которые мы выполняем в созданной подоболочке. или оператор||
означает :Если команда с левой стороны не удалась (не -нулевой код выхода ), выполните команду справа. Примечание. :Для макроса Mutt мы должны экранировать следующие символы с помощью обратной косой черты. Если вы хотите использовать команду вне Mutt, удалите обратную косую черту :
.^
"
$