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