Por que não usar o mecanismo de pipeline com grep e sed da seguinte maneira:
grep "Motherboard P/N" souceFile | sed 's/^.*Motherboard\ P\/N\ \:\ //1'
onde sourceFile é um arquivo que contém seu texto. Sed tem a seguinte expressão regular:
-
^.*
significa: desde o início da linha, qualquer número de caracteres até
-
Motherboard
string com mais alguns caracteres, que precisam de um comentário (abaixo)
-
O caracter \
na frente dos caracteres especiais "escapa" deles, então eles não são interpretados pelo shell ou pelo comando, mas são usados como caracteres simples: um espaço, barra e dois-pontos.
Ou você pode canalizar a saída de um comando (como o útil sudo lshw
)
sudo lshw | grep "Motherboard P/N" | sed 's/^.*Motherboard\ P\/N\ \:\ //1'
No entanto, é mais provável que você não encontre o texto "Motherboard P / N:" na saída de lshw, e a saída deste exemplo pode estar vazia ...
EDITAR:
Ou, como vejo o que você precisa dos seus comentários, você pode modificar o regex um pouco, para acomodar "S / N" e "P / N" ao mesmo tempo. Use um ponto .
no lugar de um caractere que varia entre as linhas do texto de origem. Por exemplo:
sed 's/^.*Motherboard\ P\/N\ \:\ //1' # the initial version
sed 's/^.*Motherboard\ .\/N\ \:\ //1' # dot instead of "P"
... o mesmo para grep