$ lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*//p'
Intel(R) Atom(TM) CPU Z3735F
Notas
-
-n
não imprime nada até pedirmos -
-r
use ERE -
/Model name/
encontra a linha comModel name
-
s/old/new/
replaceold
comnew
-
.*:\s*
qualquer coisa antes de dois pontos, dois pontos e qualquer quantidade de espaço horizontal -
(.*) @
salva qualquer número de caracteres antes de' @'
-
referência ao padrão salvo
-
p
imprime somente a linha que editamos
Para se livrar de espaços duplos, você pode fazer um comando s
extra:
$ lscpu | sed -nr '/Model name/ s/ / /g; s/.*:\s*(.*) @ .*//p'
Intel(R) Atom(TM) CPU Z3735F
O comando não funciona se houver mais de dois espaços em qualquer lugar, portanto, para excluir vários espaços implacavelmente, use um sed
loop:
$ lscpu | sed -nr ':a;s/ / /;ta; /Model name/ s/.*: (.*) @ .*//p'
Intel(R) Atom(TM) CPU Z3735F
Esse :a;s/ / /;ta
continua processando o fluxo até que não haja espaços duplos em lugar nenhum. Observe que não será necessário um endereço, então tivemos que mastigar todo o fluxo antes de selecionar a linha. Isso não levará um tempo considerável quando estivermos apenas analisando a saída de lscpu
, mas em um arquivo grande ou em vários arquivos, ele pode ficar muito lento. Poderíamos canalizar a saída do comando original para outro sed
com o loop para evitar trabalhar em todo o fluxo:
$ lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*//p' | sed ':a;s/ / /;ta'
Intel(R) Atom(TM) CPU Z3735F