$ lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*//p'
Intel(R) Atom(TM) CPU Z3735F
Notas
-
-nnão imprime nada até pedirmos -
-ruse ERE -
/Model name/encontra a linha comModel name -
s/old/new/replaceoldcomnew -
.*:\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 -
pimprime 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