Manter mais linhas em uma variável pode ser muito doloroso. Na verdade, quando você usa apenas dmesg | grep idVendor
, a saída será organizada em mais linhas, mas quando você executa dmesgDevs=$(dmesg | grep idVendor)
, todas as linhas serão mescladas em uma única sequência.
Agora, para imprimir dmesgDevs
linha por linha, você pode definir a variável separador de campo interno (IFS), e, em seguida, deixe-o analisar em uma matriz. Algo parecido com isto, ele irá analisar cada vez que uma linha de entrada for separada por [
:
while IFS='[' read ADDR; do for i in "${ADDR[@]}"; do echo $i; done; done <<< "$dmesgDevs"
Finalmente, para verificar se há uma palavra em determinada linha, apenas envie a saída do comando anterior para grep
:
while IFS='[' read ADDR; do for i in "${ADDR[@]}"; do echo $i; done; done <<< "$dmesgDevs" | grep 'word'
Nesse caso, consegui encontrar uma solução porque cada linha começa com o mesmo padrão ( [
), mas isso não acontece o tempo todo. Então, como alternativa, em vez de manter a saída do comando dmesg | grep idVendor
em uma variável, mantenha-a em um arquivo; por exemplo, em /tmp/dmesgDevs
. Você pode fazer isso usando:
dmesg | grep idVendor > /tmp/dmesgDevs
Então, tudo é muito simples:
cat /tmp/dmesgDevs
grep 'word' /tmp/dmesgDevs