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

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

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

9 ответов

$ 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:

$ 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
ответ дан 22 May 2018 в 15:59
  • 1
    Это работает, но все еще есть дополнительные пробелы. – Haxalicious 22 December 2017 в 00:53
  • 2
    @Haxalicious жаль, что меня что-то отвлекло. Я отредактировал свою оригинальную версию, чтобы обрезать конечное пространство, и добавил версию, которая удаляет все двойные пробелы – Zanna 22 December 2017 в 01:35
$ 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:

$ 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
ответ дан 18 July 2018 в 00:41
$ 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:

$ 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
ответ дан 24 July 2018 в 17:16

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

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'

Результат: [!d3 ]

Intel(R) Core(TM) i5-4210U CPU
2
ответ дан 22 May 2018 в 15:59
  • 1
    Но это не избавляет от «Название модели: " впереди. – Haxalicious 22 December 2017 в 00:09
  • 2
    Пожалуйста, отправьте пример того, что вы хотите, извините за смешение! – George Udosen 22 December 2017 в 00:13
  • 3
    Выполнение с мобильного теста и дайте мне знать – George Udosen 22 December 2017 в 00:16
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
ответ дан 22 May 2018 в 15:59

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

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
ответ дан 18 July 2018 в 00:41
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
ответ дан 18 July 2018 в 00:41

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

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
ответ дан 24 July 2018 в 17:16
  • 1
    Но это не избавляет от «Название модели: & quot; впереди. – Haxalicious 22 December 2017 в 00:09
  • 2
    Пожалуйста, отправьте пример того, что вы хотите, извините за смешение! – George Udosen 22 December 2017 в 00:13
  • 3
    Выполнение с мобильного теста и дайте мне знать – George Udosen 22 December 2017 в 00:16
lscpu | grep 'Model name' | cut -f 2 -d ":" | awk '{$1=$1}1' lscpu, чтобы получить информацию о процессоре [F4] для того, чтобы извлечь строку, содержащую имя процессора. [F5], чтобы удалить часть строки перед :. Поэтому он будет удалить часть "Model name:" от выхода. awk '{$1=$1}1', чтобы удалить пробел из начала строки. [!образец н0]

выход

$ lscpu | grep 'Model name' | cut -f 2 -d ":" | awk '{$1=$1}1' Intel(R) Pentium(R) CPU N3520 @ 2.16GHz
1
ответ дан 24 July 2018 в 17:16

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

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