2008/2/17 [EMAIL PROTECTED] <[EMAIL PROTECTED]>: > > > > > > > Olá pessoal, > > Sou inicante no shell, e estou precisando de uma pequena ajuda dos colegas. > > Preciso separar a última parte de uma linha. > Tipo, uma linha de exemplo seria: > > http://www.site.com.br/controle/interno/14_02_2008_15_44.avi > > outra linha de exemplo seria > > http://www.site.com.br/controle/interno/patio/deposito/03_01_2008_21_18.avi > > (o nome do arquivo varia sempre, e > quantidade de delimitadores "/" também, o que não varia nunca > é que o campo de interesse é sempre a parte final, ou seja, tudo depois > do último "/" ). > > Inicialmente, tentei usar o cut, com o seguinte comando: > > NOME=http://www.site.com.br/controle/interno/arquivo.avi > echo $NOME | cut -f6 -d/ > > mas como a quantidade de delimitadores "/" pode variar, o cut não > funcionaria corretamente, > já que o cut conta partindo do início da linha. > > Se eu tivesse como usar o cut ao contrário, ou seja, contando do final > da linha > até o início, seria bem simples, pq o meu campo de interesse é, > obrigatóriamente, sempre o último. > > Agradeço muito mesmo, qualquer ajuda ou dica. > > Obrigado > > Emmanuel Abadala > Anápolis - Go > >
Ola Emmanuel, Acredito que nao ha nada melhor para isso do que um regex, como eu tenho um bom conhecimento de perl, tive uma pequena ajuda dele, mas temos inumeras outras formas de fazer isso, tanto com sed, cut, awk, python, ruby, etc. Seguindo o conceito do shell script peguei um one-liner em perl e veja o resultado: NOME="http://www.site.com.br/controle/interno/arquivo.avi" AVI=`echo $NOME |perl -ne 'if ( /.*?\/(\w+)\.avi$/ ) { print $1 . ".avi"; }'` echo $AVI Acredito que era isso que vc esperava :-) um abraco, -- | -- | Otávio Fernandes < otaviof | gmail | com > | FreeBSD 7.0-PRERELEASE && GNU/Linux User: 283.396 | (( Especial Programação )) http://geekbr.podcastbrasil.com/ -- 0.15 | --