Filtrando entrada com sed (regex)

1

Estou tendo um problema com o sed não retornar o que eu esperava ao usar um padrão regex para limpar alguma saída de uma consulta mysql.

mysql -uroot -p -e 'SELECT 'path' FROM db.media_gallery' | sed -n -r 's/[^\/]+([^\s]+).*//p'

A consulta retorna um monte de linhas como estas:

| /media/M/W/lmt_MWS04_8.png    |
| /media/M/W/lmt_MWS02_11.png   |

Quando eu canalizo isso através do comando sed listado acima, ele retorna isso:

//M/W/lmt_MWS04_8.png
//M/W/lmt_MWS02_11.png

Para onde foi a "mídia"? Por que remove aleatoriamente uma parte da minha string?

Alguém sabe como consertar minha regex?

    
por Stefan 19.09.2013 / 02:27

2 respostas

3

Não há necessidade de sed, o verdadeiro problema é que você está usando a saída pretendida do mysql que é destinada ao consumo humano, e não ao consumo automatizado. Esta é uma tarefa simples que o mysql é mais do que capaz.

mysql -N -s -r -uroot -p -e 'SELECT 'path' FROM db.media_gallery'

retornará:

/media/M/W/lmt_MWS04_8.png
/media/M/W/lmt_MWS02_11.png

do 'man mysql':

--skip-column-names, -N
--silent, -s
--raw, -r
    
por 23.09.2013 / 19:56
0

A "mídia" correspondia a "[^ /] +", então foi substituída pelas coisas entre parênteses. Se você quiser, precisa abrir os parênteses antes dessa cláusula regex.

    
por 19.09.2013 / 02:58