Pegar string

1. Pegar string

Luiz bandas
BANDAS

(usa Outra)

Enviado em 12/01/2011 - 10:43h

Tenho uma arquivo que contém vários relatorios e necessito dividi-los e criar o nome do arquivo conforme a
linha abaixo:

-***REGISTRO*DE*SEPARACAO*** INI RMEP016 165 PAB0

Tenho que pegar através do comando SED o string (RMEP016 165) e colocá-lo numa variável como RMEP015-M165


Estou tentado assim: TESTE=`echo $linha | sed '^:[RMEP]:[0-9]{3}'`

Mas não consegui alguém tem uma dica, por favor


  


2. Re: Pegar string

Perfil removido
removido

(usa Nenhuma)

Enviado em 12/01/2011 - 14:32h

A expressão do sed está incorreta.
Veja bem: o sed trabalha com substituições de strings, não necessariamente com "capturação" de strings. Essa tarefa é feita com o (e)grep

Dê uma olhada nesse HowTo: http://aurelio.net/sed/sed-HOWTO/sed-HOWTO-1.html


3. Re: Pegar string

Perfil removido
removido

(usa Nenhuma)

Enviado em 13/01/2011 - 10:29h

Você deveria postar umas 3 linhas do arquivo e dizer o que você quer filtrar.
Mas nos mostrou a sua tentativa.
O cansaço faz isso. :)






4. Re: Pegar string

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 13/01/2011 - 13:29h

sed 's/\(.*\)RMEP\(.*\)/\2/' | awk '{ print "RMEP" $1 "-M" $2 }'


5. Re: Pegar string

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 18/01/2011 - 13:18h

sed 's/.*RMEP \([^ ]*\).*/RMEP-M\1/'

O \1 é o número 165. Veja também que a string toda será substituída devido ao uso do ".*".

E o sed também pode ser usado para capturar string sim e ele não é só um comando de substiuição como todo mundo acha.
O próprio sentido de endereçamento (como visto no tutor do Aurélio) só faz sentido porque o sed consegue capturar/procurar uma string.
O sed pode emular praticamente quase toda opção do grep, tornando-o assim, em alguns casos, desnecessário.

E voltando na sua expressão: O ^ casa no inicio da string. Não faz sentido utilizá-lo aqui. A classe [RMEP] casa somente UM caractere e não a string RMEP como você deve ter pensado.
A expressão [0-9]{3} está correta, mas lembre-se que o padrão do sed é utilizar a sintaxe antiga das regexes, então o certo seria [0-9]\{3\} (veja a opção -r na man page).

Acho que é isso.
t+


6. Re: Pegar string

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 18/01/2011 - 17:59h

awk '{ print $3"-M"$4 }'



7. Re: Pegar string

Perfil removido
removido

(usa Nenhuma)

Enviado em 18/01/2011 - 20:14h

Não disse que o sed não pode ser utilizado para capturar strings, quis dizer que a função principal dele é substituír strings, mas sim, pode utilizar ele para fazer outras coisas. Particularmente, prefiro utilizar o grep -E (egrep) para tal tarefa (capturar strings), mas isso é opcional.


8. Re: Pegar string

Perfil removido
removido

(usa Nenhuma)

Enviado em 19/01/2011 - 17:12h

o awk do fdmarp funcionou

echo "-***REGISTRO*DE*SEPARACAO*** INI RMEP016 165 PAB0" | awk '{ print $3"-M"$4 }'






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts