Usando grep
com PCRE ( -P
):
lspci | grep -Po '^\s*\K\S+(?=\s+VGA\s)'
e
lspci -v -s 00:01.0 | grep -Po '^\s*\K\S+(?=\s+VGA\s)'
-
^\s*
corresponde a zero ou mais espaços em branco no início e \K
descarta a correspondência, isso é para lidar com o segundo caso em que há espaços no início
-
\S+
corresponde a qualquer número de caracteres que não sejam espaços em branco, essa é a parte desejada
-
O padrão lookahead positivo de largura zero, (?=\s+VGA\s)
, garante que a correspondência desejada seja flutuada em VGA
após os espaços em branco após a parte desejada.
Para salvar a saída em uma variável, use a substituição de comando ( $()
):
value=$(lspci | grep -Po '^\s*\K\S+(?=\s+VGA\s)')
Da mesma forma:
value=$(lspci -v -s 00:01.0 | grep -Po '^\s*\K\S+(?=\s+VGA\s)')
Agora você pode obter o valor em $value
.
Exemplo (no meu sistema):
$ lspci | grep -Po '^\s*\K\S+(?=\s+VGA\s)'
00:02.0
$ lspci -v -s 00:02.0 | grep -Po '^\s*\K\S+(?=\s+VGA\s)'
00:02.0