Как я могу получить название модели моего процессора?

Я делаю сложную конфигурацию и хочу отобразить модель процессора в качестве одной из характеристик. Для этого мне нужна команда, которая выводит только имя процессора в виде строки, например, «Intel Core i7 7700K». Я думаю, что и /proc/cpuinfo, и выходные данные из lscpu имеют то, что мне нужно (я бы предпочел lscpu, потому что это было бы немного более эффективно), но название модели на 4 места слишком далеко от имени производителя. Поэтому мне нужно было бы отрезать строку model name: и избавиться от лишних пробелов. Я также хотел бы знать, как избавиться от @ (clockspeed).

6
задан 29 December 2017 в 20:00

3 ответа

$ lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU  Z3735F

Примечания

  • -n ничего не печатать, пока мы не попросим об этом
  • -r использовать ERE
  • /Model name/ найти строку с Model name
  • s/old/new/ заменить old на new
  • .*:\s* что-нибудь перед двоеточием, двоеточием и любым количеством горизонтального пространства
  • (.*) @ сохранить любое количество символов перед ' @'
  • \1 ссылкой на сохраненный шаблон
  • p печатать только строку, которую мы редактировали

] Чтобы избавиться от двойных пробелов, вы можете выполнить дополнительную команду s:

$ lscpu | sed -nr '/Model name/ s/  / /g; s/.*:\s*(.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU Z3735F

Не работает, если где-то больше двух пробелов, поэтому, чтобы безостановочно удалить несколько пробелов, используйте sed loop:

$ lscpu | sed -nr ':a;s/  / /;ta; /Model name/ s/.*: (.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU Z3735F 

Этот :a;s/ / /;ta продолжает обрабатывать поток до тех пор, пока нигде не будет двойных пробелов. Обратите внимание, что адрес не будет принят, поэтому нам пришлось просмотреть весь поток, прежде чем выбрать строку. Это не займет заметного количества времени, когда мы только анализируем вывод lscpu, но для огромного файла или для нескольких файлов это может стать довольно медленным. Вместо этого мы могли бы перенаправить вывод исходной команды в другую sed с помощью цикла, чтобы избежать работы со всем потоком:

$ lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*/\1/p' | sed ':a;s/  / /;ta'
Intel(R) Atom(TM) CPU Z3735F
14
ответ дан 29 December 2017 в 20:00

Используйте это, чтобы получить то, что вы хотите:

lscpu | grep "Model name:" | sed -r 's/Model name:\s{1,}//g'

Результат:

Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz

Или:

lscpu | grep "Model name" | sed -r 's/Model name:\s{1,}(.*) @ .*z\s*/\1/g'

Результат:

Intel(R) Core(TM) i5-4210U CPU
2
ответ дан 29 December 2017 в 20:00
lscpu | grep 'Model name' | cut -f 2 -d ":" | awk '{$1=$1}1'
  • lscpu Чтобы получить информацию о процессоре
  • grep 'Model name' Извлечь строку, содержащую имя процессора.
  • cut -f 2 -d ":" Удалить часть строки перед :. Таким образом, он удалит часть «Model name:» из вывода.
  • awk '{$1=$1}1' Для удаления пробела из начала строки.

Пример вывода

$ lscpu | grep 'Model name' | cut -f 2 -d ":" | awk '{$1=$1}1'
Intel(R) Pentium(R) CPU N3520 @ 2.16GHz
1
ответ дан 29 December 2017 в 20:00

Другие вопросы по тегам:

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