Я делаю conky config, и я хочу отобразить модель CPU как одну из характеристик. Для этого мне нужна команда, которая выводит только имя процессора как строку, например «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
Чтобы избавиться от двойных пробелов, вы можете сделать дополнительную команду 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
$ lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU Z3735F
Чтобы избавиться от двойных пробелов, вы можете сделать дополнительную команду 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
$ lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU Z3735F
Чтобы избавиться от двойных пробелов, вы можете сделать дополнительную команду 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
Используйте это, чтобы получить то, что вы хотите:
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
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
Используйте это, чтобы получить то, что вы хотите:
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
Используйте это, чтобы получить то, что вы хотите:
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, чтобы получить информацию о процессоре [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