extrai apenas o padrão de caminho regex da linha de dados

1

Dado o looping sobre este conjunto de dados, qual é o método mais conciso para extrair apenas o padrão '/ path / file'? (excluindo o nome da biblioteca e endereço de memória).

ldd /bin/bash
        linux-vdso.so.1 (0x00007ffe4e1a5000)
        libtinfo.so.6 => /lib64/libtinfo.so.6 (0x00007fb4d07de000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fb4d05da000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fb4d0205000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fb4d0d25000)

Meu sed/regex é vergonhosamente fraco. Eu vi algumas outras respostas do Stack Overflow, mas todas parecem um pouco erradas; incluindo algo além do padrão ou a expressão funciona na versão Unix de sed e não no GNU.

Crédito extra se você puder fazer esse conceito se encaixar na minha cabeça grande e idiota. A fila mais curta recebe o jantar de frango.

    
por todd_dsm 20.04.2018 / 22:05

1 resposta

3

Consegui realizar o que eu acho que você deseja usando grep com regex estendido:

ldd /bin/bash | grep -oE '(\/.+?) '

O grep está procurando por um literal / seguido por qualquer coisa (não-ganancioso) .+? até qualquer espaço em branco

$ ldd /bin/bash | grep -oE '(\/.+?) '
/lib64/libtinfo.so.5
/lib64/libdl.so.2
/lib64/libc.so.6
/lib64/ld-linux-x86-64.so.2
    
por 20.04.2018 / 22:28