Em Mon, 16 Mar 2009 15:22:21 -0400, Aurélio Jargas <verde@...>
escreveu:
> Oi Rafael,
>
> Bela explicação mesmo, parabéns!
>
> Só tenho uma dica de melhoria: Se você usar um endereço vazio no s///,
> o sed automaticamente usa o último endereço casado. Isso vem desde os
> primórdios de sed, então é seguro de usar.
Hehehe, eu sabia que existia uma forma mais simples. :)
[]s
Rafael
Tenho o seguinte texto:
1N5027841N;2N194.652N;3NNULL3N;4N90604N;5NNULL5N;6N2009-03-31
08:28:15.9494076N;7NNULL7N;8NEXB8N;9NNULL9N;11N111N;12NNULL12N;
e quero encontrar o seguinte trecho, que sempre se encontra no início:
1N5027841N;
Então elaborei a seguinte expressão: '^([0-9]+[ABCN]).+\1[;]'
O problema é que é encontrado o seguinte:
1N5027841N;2N194.652N;3NNULL3N;4N90604N;5NNULL5N;6N2009-03-31
08:28:15.9494076N;7NNULL7N;8NEXB8N;9NNULL9N;11N111N;
Tentei utilizar caracteres não gulosos mas não deu muito certo e não consegui
resolver... acho que não os utilizei corretamente...
Quando ao '.*' infelizmente eu preciso que seja aceito tudo entre os
delimitadores de inicio e fim...
Se alguém tiver uma dica....
Boa tarde
Amigo não entendi bem se vc quer a string "1N5027841N" ou algo parecido que
sempre vai estar no mesmo campo, então fiz algo pras duas coisas.
Se seu arquivo sempre for composto por linhas como a que vc mandou pra lista,
que deu a entendeu que seus campos são delimitados por " ; ", tente um cut -d
";" -f 1 arquivo.txt.
$ cat teste
1N5027841N;2N194.652N;3NNULL3N;4N90604N;5NNULL5N;6N2009-03-31
08:28:15.9494076N;7NNULL7N;8NEXB8N;9NNULL9N;11N111N;12NNULL12N;
$ sed -n '/1N5027841N;/p' teste |cut -d ";" -f 1
1N5027841N
ou simples
cut -d ";" -f 1 teste
1N5027841N
Atenciosamente
Marlon V. Reck
> Tenho o seguinte texto:
>
> 1N5027841N;2N194.652N;3NNULL3N;4N90604N;5NNULL5N;6N2009-03-31
> 08:28:15.9494076N;7NNULL7N;8NEXB8N;9NNULL9N;11N111N;12NNULL12N;
>
> e quero encontrar o seguinte trecho, que sempre se encontra no início:
>
> 1N5027841N;
>
> Então elaborei a seguinte expressão: '^([0-9]+[ABCN]).+\1[;]'
>
> O problema é que é encontrado o seguinte:
> 1N5027841N;2N194.652N;3NNULL3N;4N90604N;5NNULL5N;6N2009-03-31
> 08:28:15.9494076N;7NNULL7N;8NEXB8N;9NNULL9N;11N111N;
>
> Tentei utilizar caracteres não gulosos mas não deu muito certo e não
> consegui resolver... acho que não os utilizei corretamente...
>
> Quando ao '.*' infelizmente eu preciso que seja aceito tudo entre os
> delimitadores de inicio e fim...
>
> Se alguém tiver uma dica....
Na verdade estou buscando esse valor de um banco de dados...
E esse valor pode ser variável...
O texto que quero encontrar "1N5027841N" pode ser variável e possui o seguinte
formato:
[0-9]+[ABCN] ou seja o 1N é a abertura de uma tag, vamos exemplificar assim...
.* no caso do exemplo é o valor "502784", no entanto neste caso é um número mas
eu posso vir a ter aqui qualquer coisa... inclusive ponto e vírgula, e por isso
não posso quebrar por ";" pra separar
\1[;] é o retrovisor pro 1N contendo um ponto e vírgula indicando que a tag foi
fechada.
O negócio é meio chatinho...
Mas valeu a tentativa...
--- Em sed-br@..., "Marlon V. Reck" <marlon_mca@...> escreveu
>
>
> Boa tarde
>
> Amigo não entendi bem se vc quer a string "1N5027841N" ou algo parecido que
> sempre vai estar no mesmo campo, então fiz algo pras duas coisas.
> Se seu arquivo sempre for composto por linhas como a que vc mandou pra lista,
> que deu a entendeu que seus campos são delimitados por " ; ", tente um cut -d
> ";" -f 1 arquivo.txt.
>
> $ cat teste
>
>
> 1N5027841N;2N194.652N;3NNULL3N;4N90604N;5NNULL5N;6N2009-03-31
> 08:28:15.9494076N;7NNULL7N;8NEXB8N;9NNULL9N;11N111N;12NNULL12N;
>
> $ sed -n '/1N5027841N;/p' teste |cut -d ";" -f 1
> 1N5027841N
>
> ou simples
> cut -d ";" -f 1 teste
>
> 1N5027841N
>
>
>
>
>
> Atenciosamente
> Marlon V. Reck
>
> > Tenho o seguinte texto:
> >
> > 1N5027841N;2N194.652N;3NNULL3N;4N90604N;5NNULL5N;6N2009-03-31
> > 08:28:15.9494076N;7NNULL7N;8NEXB8N;9NNULL9N;11N111N;12NNULL12N;
> >
> > e quero encontrar o seguinte trecho, que sempre se encontra no início:
> >
> > 1N5027841N;
> >
> > Então elaborei a seguinte expressão: '^([0-9]+[ABCN]).+\1[;]'
> >
> > O problema é que é encontrado o seguinte:
> > 1N5027841N;2N194.652N;3NNULL3N;4N90604N;5NNULL5N;6N2009-03-31
> > 08:28:15.9494076N;7NNULL7N;8NEXB8N;9NNULL9N;11N111N;
> >
> > Tentei utilizar caracteres não gulosos mas não deu muito certo e não
> > consegui resolver... acho que não os utilizei corretamente...
> >
> > Quando ao '.*' infelizmente eu preciso que seja aceito tudo entre os
> > delimitadores de inicio e fim...
> >
> > Se alguém tiver uma dica....
>
Salve Diego.
Acredito que o que você precisa é o seguinte:
echo
"1N5027841N;2N194.652N;3NNULL3N;4N90604N;5NNULL5N;6N2009-03-3108:28:15.9494076N;\
7NNULL7N;8NEXB8N;9NNULL9N;11N111N;12NNULL12N;"
| sed 's/^\([^;]*\).*/\1/'
Resultado - 1N5027841N.
Se você necessita que a vírgula fique use o seguinte:
echo
"1N5027841N;2N194.652N;3NNULL3N;4N90604N;5NNULL5N;6N2009-03-3108:28:15.9494076N;\
7NNULL7N;8NEXB8N;9NNULL9N;11N111N;12NNULL12N;"
| sed 's/^\([^;]*.\).*/\1/'
Resultado - 1N5027841N;.
abraços
Halder Flugel
"Diego
Mancilha"
<diegomancilha@ Para
yahoo.com.br> sed-br@...
Enviado por: cc
sed-br@yahoogru
pos.com.br Assunto
[sed-br] Dificuldade em restringir a
busca.
31 Mar 2009
12:55
Tamanho do
Email:20414
Favor responder
a
sed-br@yahoogru
pos.com.br
Tenho o seguinte texto:
1N5027841N;2N194.652N;3NNULL3N;4N90604N;5NNULL5N;6N2009-03-31
08:28:15.9494076N;7NNULL7N;8NEXB8N;9NNULL9N;11N111N;12NNULL12N;
e quero encontrar o seguinte trecho, que sempre se encontra no início:
1N5027841N;
Então elaborei a seguinte expressão: '^([0-9]+[ABCN]).+\1[;]'
O problema é que é encontrado o seguinte:
1N5027841N;2N194.652N;3NNULL3N;4N90604N;5NNULL5N;6N2009-03-31
08:28:15.9494076N;7NNULL7N;8NEXB8N;9NNULL9N;11N111N;
Tentei utilizar caracteres não gulosos mas não deu muito certo e não consegui
resolver... acho que não os utilizei corretamente...
Quando ao '.*' infelizmente eu preciso que seja aceito tudo entre os
delimitadores
de inicio e fim...
Se alguém tiver uma dica....
_._,_.___
-----------------------------------------
This E-mail is confidential. It may also be legally
privileged. If you are not the addressee you may not
copy, forward, disclose or use any part of it. If
you have received this message in error, please delete
it and all copies from your system and notify the sender
immediately by return E-mail.
Internet communications cannot be guaranteed to be timely,
secure, error or virus-free. The sender does not accept
liability for any errors or omissions.
"SAVE PAPER - THINK BEFORE YOU PRINT!"
Esta mensagem pode conter informações confidenciais e/ou
privilegiadas. Se você não for o destinatário ou a pessoa
autorizada a recebê-la, não pode usar, copiar ou divulgar
as informações nela contidas ou tomar qualquer ação baseada
nelas. Se você recebeu esta mensagem por engano, por favor,
avise imediatamente o remetente, e em seguida, apague-a.
Comunicações pela Internet não podem ser garantidas quanto
à segurança ou inexistência de erros ou de vírus.
O remetente, por esta razão, não aceita responsabilidade por
qualquer erro ou omissão no contexto da mensagem decorrente
da transmissão via Internet.
"ECONOMIZE PAPEL - PENSE ANTES DE IMPRIMIR!"
On Tue, Mar 31, 2009 at 04:52:10PM -0000, Diego Mancilha wrote:
> Na verdade estou buscando esse valor de um banco de dados...
> E esse valor pode ser variável...
>
> O texto que quero encontrar "1N5027841N" pode ser variável e possui o seguinte
formato:
>
> [0-9]+[ABCN] ou seja o 1N é a abertura de uma tag, vamos exemplificar assim...
>
> .* no caso do exemplo é o valor "502784", no entanto neste caso é um número
mas eu posso vir a ter aqui qualquer coisa... inclusive ponto e vírgula, e por
isso não posso quebrar por ";" pra separar
>
> \1[;] é o retrovisor pro 1N contendo um ponto e vírgula indicando que a tag
foi fechada.
>
> O negócio é meio chatinho...
também não entendi muito bem o que você quer mas acho que o problema é
que você precisa casar uma regex até a primeira ocorrência da expressão
seguinte que no caso seria você informar .* e ele casar até a primeira
ocorrência de 1N e não até a última; bom isso eu só vi em perl com .*?
mas em sed a única forma que conheço é colocar uma marca para delimitar
o limite da minha regex:
echo '1N5027841N;2N194.652N;3NNULL3N;4N90604N;5NNULL5N;6N2009-03-31
08:28:15.9494076N;7NNULL7N;8NEXB8N;9NNULL9N;11N111N;12NNULL12N;' |
sed -r 's/1N/&\n/2;s/^([^\n]+)\n.*$/\1/'
onde eu marco a segunda ocorrência do "1N", uma vez que você disse que
isso é sempre no início da linha. talvez isso lhe sirva.
--
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------
Pessoal
Valeu pelas dicas, no entanto como eu tinha dito antes estou pegando o valor do
banco... o que esqueci de dizer é que estou usando pl/pgsql pra processar os
valores... A principio eu acabei inserindo um caracter de controle pra evitar
que acontecesse aquela situação... a princípio resolveu...
Mais um vez obrigado!
Abraços!
--- Em sed-br@..., jimmy <ronaldo_tgz@...> escreveu
>
> On Tue, Mar 31, 2009 at 04:52:10PM -0000, Diego Mancilha wrote:
> > Na verdade estou buscando esse valor de um banco de dados...
> > E esse valor pode ser variável...
> >
> > O texto que quero encontrar "1N5027841N" pode ser variável e possui o
seguinte formato:
> >
> > [0-9]+[ABCN] ou seja o 1N é a abertura de uma tag, vamos exemplificar
assim...
> >
> > .* no caso do exemplo é o valor "502784", no entanto neste caso é um número
mas eu posso vir a ter aqui qualquer coisa... inclusive ponto e vírgula, e por
isso não posso quebrar por ";" pra separar
> >
> > \1[;] é o retrovisor pro 1N contendo um ponto e vírgula indicando que a tag
foi fechada.
> >
> > O negócio é meio chatinho...
>
> também não entendi muito bem o que você quer mas acho que o problema é
> que você precisa casar uma regex até a primeira ocorrência da expressão
> seguinte que no caso seria você informar .* e ele casar até a primeira
> ocorrência de 1N e não até a última; bom isso eu só vi em perl com .*?
> mas em sed a única forma que conheço é colocar uma marca para delimitar
> o limite da minha regex:
>
> echo '1N5027841N;2N194.652N;3NNULL3N;4N90604N;5NNULL5N;6N2009-03-31
08:28:15.9494076N;7NNULL7N;8NEXB8N;9NNULL9N;11N111N;12NNULL12N;' |
> sed -r 's/1N/&\n/2;s/^([^\n]+)\n.*$/\1/'
>
> onde eu marco a segunda ocorrência do "1N", uma vez que você disse que
> isso é sempre no início da linha. talvez isso lhe sirva.
>
>
> --
> "Não manejo bem as palavras
> Mas manipulo bem as strings."
> ------------------------------
>
Tem duas formas, mas eu indico a seguinte :
awk 'NR = 1 {print $0}' arquivo
--- Em sed-br@..., "carllao2003" <ninjainc@...> escreveu
>
> PessoALL,
>
> sou muito novato nesse negócio de sed mas preciso urgentemente de
> uma
> ajudinha...Eu preciso ler um arquivo texto, pegar a sua primeira
> linha jogá-la dentro de um outro arquivo qq e apagar a linha q eu
> acabei de pegar do seu arquivo original. Como eu faço isso usando
> os
> ed?
>
> Exemplo do texto
>
> REDE LOCAL
> Uma rede local e um sistema
> de interligacao entre
> computadores que permite
> comunicacao entre eles
>
> No aguardo
>
Prezados colegas,
Estou precisando de uma expressão regular que me permita identificar o
seguinte padrão:
CONNECT XXX.XXX.XXX.XXX:YYYYY HTTP
onde XXX.XXX.XXX.XXX corresponde ao padrão de formação de um endereço IP e,
YYYYY corresponde a um numero
superior a 1024.
Voces podem me ajudar?
Antecipadamente agradeço,
Claudia
[As partes desta mensagem que não continham texto foram removidas]
Claudia,
2009/4/24 Claudia <casvalvini@...>:
> Prezados colegas,
>
> Estou precisando de uma expressão regular que me permita identificar o
> seguinte padrão:
> CONNECT XXX.XXX.XXX.XXX:YYYYY HTTP
> onde XXX.XXX.XXX.XXX corresponde ao padrão de formação de um endereço IP e,
> YYYYY corresponde a um numero
> superior a 1024.
> Voces podem me ajudar?
vc não especificou onde estava enfrentando problemas na construção
dessa expressão. Eu suponho que o problema seja o "." (seria o mais
comum, ao menos!).
Para que sua regexp aceite somente o ponto (e não um caracter
qualquer, já que o ponto é curinga!), vc precisa escapá-lo. Deve
funcionar sua regexp agora (se a dúvida for outra, mande aí e a gente
tenta arrumar!).
Seria bom também que você mandasse no e-mail a regexp que você tem aí,
mesmo que errada. Fica mais fácil identificar a raiz do seu problema e
te ajudar.
Abraço
> Antecipadamente agradeço,
>
> Claudia
--
Andrea VB
Please, don't CC me when replying to me on the lists, and use BCC when
sending mass e-mails.
Oi!
Estou tentando "CONNECT ´[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*´:[1025-35353]" mas
não está correto...
[]s
Cláudia
2009/4/24 Andrea VB <andreavb1985@...>
>
>
> Claudia,
>
> 2009/4/24 Claudia <casvalvini@... <casvalvini%40gmail.com>>:
> > Prezados colegas,
> >
> > Estou precisando de uma expressão regular que me permita identificar o
> > seguinte padrão:
> > CONNECT XXX.XXX.XXX.XXX:YYYYY HTTP
> > onde XXX.XXX.XXX.XXX corresponde ao padrão de formação de um endereço IP
> e,
> > YYYYY corresponde a um numero
> > superior a 1024.
> > Voces podem me ajudar?
>
> vc não especificou onde estava enfrentando problemas na construção
> dessa expressão. Eu suponho que o problema seja o "." (seria o mais
> comum, ao menos!).
> Para que sua regexp aceite somente o ponto (e não um caracter
> qualquer, já que o ponto é curinga!), vc precisa escapá-lo. Deve
> funcionar sua regexp agora (se a dúvida for outra, mande aí e a gente
> tenta arrumar!).
> Seria bom também que você mandasse no e-mail a regexp que você tem aí,
> mesmo que errada. Fica mais fácil identificar a raiz do seu problema e
> te ajudar.
>
> Abraço
>
> > Antecipadamente agradeço,
> >
> > Claudia
>
> --
> Andrea VB
> Please, don't CC me when replying to me on the lists, and use BCC when
> sending mass e-mails.
>
>
>
[As partes desta mensagem que não continham texto foram removidas]
--- Em sed-br@..., Claudia <casvalvini@...> escreveu
>
> Prezados colegas,
>
> Estou precisando de uma expressão regular que me permita identificar o
> seguinte padrão:
> CONNECT XXX.XXX.XXX.XXX:YYYYY HTTP
> onde XXX.XXX.XXX.XXX corresponde ao padrão de formação de um endereço IP e,
> YYYYY corresponde a um numero
> superior a 1024.
> Voces podem me ajudar?
>
> Antecipadamente agradeço,
>
> Claudia
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
encontrei um comando para o egrep que pega ips, mas acho que para o sed, por
exemplo, muda pouca coisa:
egrep '^
*(([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}([01]?[0-9][0-9]?|2[0-4][0-9]|25[0\
-5]) *$' your_file.txt
Mais um detalhe, podería-mos criar uma regex mais simples, mas de fato ela não
validaria um número ip
Bom dia Claudia
Não tem muita informação no seu email pra saber onde ta seu problema, se
vc
já tentou alguma coisa ou não e nem como irá usar a REGEX então aqui vai um
exemplo simples:
cat teste.txt
Nome: Nair
Sobrenome: Silveira
email: nsilveira@...
email: nsilveira@...
Nome: Carlos
Sobrenome: Martin
email: carlos.martin@...
email: cmartin87@...
Nome: Lucia
Sobrenome: Andrade
email: luciaa@...
email: lucinha@...
1N5027841N;2N194.652N;3NNULL3N;4N90604N;5NNULL5N;6N2009-03-31
08:28:15.9494076N;7NNULL7N;8NEXB8N;9NNULL9N;11N111N;12NNULL12N;
CONNECT 192.168.19.192:1045 HTTP
200.150.222.122:80 -> 234.123.112.123:80
egrep '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9]
[0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?
[0-9][0-9]?)' teste.txt
CONNECT 192.168.19.192:1045 HTTP
200.150.222.122:80 -> 234.123.112.123:80
Atenciosamente
Marlon V. Reck
--- Em sed-br@..., Claudia <casvalvini@...> escreveu
>
> Oi!
> Estou tentando "CONNECT ´[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*´:[1025-35353]" mas
> não está correto...
> []s
>
> Cláudia
>
> 2009/4/24 Andrea VB <andreavb1985@...>
>
> >
> >
> > Claudia,
> >
> > 2009/4/24 Claudia <casvalvini@... <casvalvini%40gmail.com>>:
> > > Prezados colegas,
> > >
> > > Estou precisando de uma expressão regular que me permita identificar o
> > > seguinte padrão:
> > > CONNECT XXX.XXX.XXX.XXX:YYYYY HTTP
> > > onde XXX.XXX.XXX.XXX corresponde ao padrão de formação de um endereço IP
> > e,
> > > YYYYY corresponde a um numero
> > > superior a 1024.
> > > Voces podem me ajudar?
> >
> > vc não especificou onde estava enfrentando problemas na construção
> > dessa expressão. Eu suponho que o problema seja o "." (seria o mais
> > comum, ao menos!).
> > Para que sua regexp aceite somente o ponto (e não um caracter
> > qualquer, já que o ponto é curinga!), vc precisa escapá-lo. Deve
> > funcionar sua regexp agora (se a dúvida for outra, mande aí e a gente
> > tenta arrumar!).
> > Seria bom também que você mandasse no e-mail a regexp que você tem aí,
> > mesmo que errada. Fica mais fácil identificar a raiz do seu problema e
> > te ajudar.
> >
> > Abraço
> >
> > > Antecipadamente agradeço,
> > >
> > > Claudia
> >
> > --
> > Andrea VB
> > Please, don't CC me when replying to me on the lists, and use BCC when
> > sending mass e-mails.
> >
> >
> >
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
On Fri, Apr 24, 2009 at 01:26:56PM -0300, Claudia wrote:
> Oi!
> Estou tentando "CONNECT ´[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*´:[1025-35353]" mas
> não está correto...
essa parte do range de portas "[1025-35353]" você pode usar:
(1[1-9][0-9][0-9]|10[3-9][0-9]|102[5-9]|2[0-9][0-9][0-9])
basta juntar com as regex que já foram enviadas.
--
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------
Boa noite senhores,
tenho arquivos textos gerados por um programa Fortran simples. São tabelas com
diversos dados disponíveis em colunas enormes. O fato é que por um erro de
formatação no programa Fortran ao imprimir uma variável cujo tamanho é maior do
que o reservado para ela o programa imprimi ******** (8 asteriscos). Pensei em
substituir os asteriscos utilizando o sed, no entanto, sed 's/********/coisa/'
não funciona nem a pau. Depois de muito tentar e não consegui a solução
encontrada por mim foi alterar o progrma fonte para eliminar esse bug, no
entanto a dúvida em relação ao sed permanece: Como substituir asteriscos num
arquivo texto qualquer?
Valeu pela força pessoal.
sed 's/[*]\{8\}/coisa/'
abçs
--
Marcus
________________________________
De: "costa.saulo@..." <costa.saulo@...>
Para: sed-br@...
Enviadas: Segunda-feira, 11 de Maio de 2009 23:49:27
Assunto: [sed-br] sed substituição
Boa noite senhores,
tenho arquivos textos gerados por um programa Fortran simples. São tabelas com
diversos dados disponíveis em colunas enormes. O fato é que por um erro de
formatação no programa Fortran ao imprimir uma variável cujo tamanho é maior do
que o reservado para ela o programa imprimi ******** (8 asteriscos). Pensei em
substituir os asteriscos utilizando o sed, no entanto, sed 's/********/ coisa/'
não funciona nem a pau. Depois de muito tentar e não consegui a solução
encontrada por mim foi alterar o progrma fonte para eliminar esse bug, no
entanto a dúvida em relação ao sed permanece: Como substituir asteriscos num
arquivo texto qualquer?
Valeu pela força pessoal.
Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com
[As partes desta mensagem que não continham texto foram removidas]
Tenta escapar o * com a contrabarra \* pois se não o SED interpreta
como coringa.
cat teste.txt | sed -e 's/\*/TESTE/g'
2009/5/11 costa.saulo@... <costa.saulo@...>:
>
>
> Boa noite senhores,
> tenho arquivos textos gerados por um programa Fortran simples. São tabelas
> com diversos dados disponíveis em colunas enormes. O fato é que por um erro
> de formatação no programa Fortran ao imprimir uma variável cujo tamanho é
> maior do que o reservado para ela o programa imprimi ******** (8
> asteriscos). Pensei em substituir os asteriscos utilizando o sed, no
> entanto, sed 's/********/coisa/' não funciona nem a pau. Depois de muito
> tentar e não consegui a solução encontrada por mim foi alterar o progrma
> fonte para eliminar esse bug, no entanto a dúvida em relação ao sed
> permanece: Como substituir asteriscos num arquivo texto qualquer?
> Valeu pela força pessoal.
>
>
--
"Somos o que repetidamente fazemos, portanto a
excelência não é um feito é um hábito" - Aristóteles
On Tue, May 12, 2009 at 02:49:27AM -0000, costa.saulo@... wrote:
> Boa noite senhores,
> tenho arquivos textos gerados por um programa Fortran simples. São tabelas com
diversos dados disponíveis em colunas enormes. O fato é que por um erro de
formatação no programa Fortran ao imprimir uma variável cujo tamanho é maior do
que o reservado para ela o programa imprimi ******** (8 asteriscos). Pensei em
substituir os asteriscos utilizando o sed, no entanto, sed 's/********/coisa/'
não funciona nem a pau. Depois de muito tentar e não consegui a solução
encontrada por mim foi alterar o progrma fonte para eliminar esse bug, no
entanto a dúvida em relação ao sed permanece: Como substituir asteriscos num
arquivo texto qualquer?
> Valeu pela força pessoal.
>
o asterisco é um meta-caractere usado pelo sed e em vários outros
programas para compor expressões regulares, você pode dar uma olhada em
info sed 'Regular Expressions'
que tem mais detalhes sobre isso.
para fazer a substituição de um caractere "*" (asterisco) literal, você
precisa colocar um "\" (escape) antes do caractere, dessa forma a sua
substituição ficaria assim:
sed 's/\*\*\*\*\*\*\*/coisa/'
--
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------
Oi, eu preciso fazer um pre-processador para um compilador assembler com
sintaxe mais antiga.
Me deem alguma dica pois estou muito perdido para começar, nem sei se
seria melhor SED ou AWK... depois eu elaboro em cima :)
Descrevendo em português:
- Se uma linha Começa com alguns espaços
- e a segunda palavra for equ ou set
- então os espaços iniciais devem ser removidos
- todo o resto é copiado como está
obrigado,
Alain
On Wed, Jun 10, 2009 at 05:55:44PM -0300, Alain Mouette wrote:
> Oi, eu preciso fazer um pre-processador para um compilador assembler com
> sintaxe mais antiga.
>
> Me deem alguma dica pois estou muito perdido para começar, nem sei se
> seria melhor SED ou AWK... depois eu elaboro em cima :)
>
> Descrevendo em português:
> - Se uma linha Começa com alguns espaços
> - e a segunda palavra for equ ou set
seria numa linha só então?
> - então os espaços iniciais devem ser removidos
> - todo o resto é copiado como está
sed 's/^\s\+\(equ\|set\)/\1/' arquivo
>
> obrigado,
> Alain
>
>
> ------------------------------------
--
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------
tentei ser claro e esqueci do exemplo... e já consegui alguma coisa :)
(desculpe se o exemplo ficou meio grande)
$ cat testepic.asm
IFDEF CONV_DTMF ;-------Placa convertida
VERSAO set VERSAO-2; Versao
DOUT_TRI equ 0
ENDIF
;-------------------------------
FuncDig ;---Funções de Dígito
call RdNTel
decf DskDig,w
====> é isso que eu quero:
IFDEF CONV_DTMF ;-------Placa convertida
VERSAO set VERSAO-2; Versao
DOUT_TRI equ 0
ENDIF
;-------------------------------
FuncDig ;---Funções de Dígito
call RdNTel
decf DskDig,w
Fiz este comando... com as tuas dicas e do site só sed. Talvez você
possa me ajudar a arrumar melhor ;-)
$ cat testepic.asm | sed '/^\s*\w*\s*equ\|set.*/s/^\s\+//'
Obrigado pela dicas,
Alain
jimmy escreveu:
> On Wed, Jun 10, 2009 at 05:55:44PM -0300, Alain Mouette wrote:
>
>> Oi, eu preciso fazer um pre-processador para um compilador assembler com
>> sintaxe mais antiga.
>>
>> Me deem alguma dica pois estou muito perdido para começar, nem sei se
>> seria melhor SED ou AWK... depois eu elaboro em cima :)
>>
>> Descrevendo em português:
>> - Se uma linha Começa com alguns espaços
>> - e a segunda palavra for equ ou set
>>
> seria numa linha só então?
>
>
>> - então os espaços iniciais devem ser removidos
>> - todo o resto é copiado como está
>>
> sed 's/^\s\+\(equ\|set\)/\1/' arquivo
>
>
>> obrigado,
>> Alain
>>
>>
>> ------------------------------------
>>
>
>
>
>
[As partes desta mensagem que não continham texto foram removidas]
lá vou eu respondendo a mim mesmo...
infelizmente ainda não funcionou. O problema é que as linhas:
incf RState,f ;19; prox. estado (8 seta o bit 3)
movwf CCP1CON ; PWM: Compare mode, set output
têm "set" no meio e não pode tirar o espaço no começo (e outros casos
semelhantes).
Então o set|equ tem que estar na *segunda* palavra. Coisa que achava que
o comando fazia, já que o "\w" não inclui espaços.
Dessa vez fiquei sem ideias de novo
Alain
Alain Mouette escreveu:
> tentei ser claro e esqueci do exemplo... e já consegui alguma coisa :)
> (desculpe se o exemplo ficou meio grande)
>
> $ cat testepic.asm
> IFDEF CONV_DTMF ;-------Placa convertida
> VERSAO set VERSAO-2; Versao
> DOUT_TRI equ 0
> ENDIF
> ;-------------------------------
> FuncDig ;---Funções de Dígito
> call RdNTel
> decf DskDig,w
>
> ====> é isso que eu quero:
> IFDEF CONV_DTMF ;-------Placa convertida
> VERSAO set VERSAO-2; Versao
> DOUT_TRI equ 0
> ENDIF
> ;-------------------------------
> FuncDig ;---Funções de Dígito
> call RdNTel
> decf DskDig,w
>
> Fiz este comando... com as tuas dicas e do site só sed. Talvez você
> possa me ajudar a arrumar melhor ;-)
>
> $ cat testepic.asm | sed '/^\s*\w*\s*equ\|set.*/s/^\s\+//'
>
> Obrigado pela dicas,
> Alain
>
>
> jimmy escreveu:
>> On Wed, Jun 10, 2009 at 05:55:44PM -0300, Alain Mouette wrote:
>>
>>> Oi, eu preciso fazer um pre-processador para um compilador assembler com
>>> sintaxe mais antiga.
>>>
>>> Me deem alguma dica pois estou muito perdido para começar, nem sei se
>>> seria melhor SED ou AWK... depois eu elaboro em cima :)
>>>
>>> Descrevendo em português:
>>> - Se uma linha Começa com alguns espaços
>>> - e a segunda palavra for equ ou set
>>>
>> seria numa linha só então?
>>
>>
>>> - então os espaços iniciais devem ser removidos
>>> - todo o resto é copiado como está
>>>
>> sed 's/^\s\+\(equ\|set\)/\1/' arquivo
>>
>>
>>> obrigado,
>>> Alain
>>>
>>>
>>> ------------------------------------
>>>
>>
>>
>>
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
inseri essas linhas no arquivo de exemplo para fazer testes e ficou
assim:
$ cat testepic.asm
IFDEF CONV_DTMF ;-------Placa convertida
VERSAO set VERSAO-2; Versao
DOUT_TRI equ 0
ENDIF
;-------------------------------
FuncDig ;---Funções de Dígito
call RdNTel
decf DskDig,w
incf RState,f ;19; prox. estado (8 seta o bit 3)
movwf CCP1CON ; PWM: Compare mode, set output
considerando que o "equ|set" tem que ser a segunda palavra, você pode
fazer o seguinte:
sed 's/^\s\+\(\w\+\s\+\(equ\|set\)\b\)/\1/' testepic.asm
no seu comando o uso do "*" tornou opcional a existência de espaços e da
palavra que você estava testando, nesse comando que lhe enviei a palavra
e os espaços são obrigatórios.
se ainda precisar remover os espaços antes do "equ|set", considero
que seria mais simples fazer separado:
sed 's/^\s\+\(\w\+\s\+\(equ\|set\)\b\)/\1/;s/^\s\+\(equ\|set\)\b/\1/'
testepic.asm
On Wed, Jun 10, 2009 at 11:58:22PM -0300, Alain Mouette wrote:
> lá vou eu respondendo a mim mesmo...
>
> infelizmente ainda não funcionou. O problema é que as linhas:
> incf RState,f ;19; prox. estado (8 seta o bit 3)
> movwf CCP1CON ; PWM: Compare mode, set output
>
> têm "set" no meio e não pode tirar o espaço no começo (e outros casos
> semelhantes).
>
> Então o set|equ tem que estar na *segunda* palavra. Coisa que achava que
> o comando fazia, já que o "\w" não inclui espaços.
>
> Dessa vez fiquei sem ideias de novo
>
> Alain
>
> Alain Mouette escreveu:
> > tentei ser claro e esqueci do exemplo... e já consegui alguma coisa :)
> > (desculpe se o exemplo ficou meio grande)
> >
> > $ cat testepic.asm
> > IFDEF CONV_DTMF ;-------Placa convertida
> > VERSAO set VERSAO-2; Versao
> > DOUT_TRI equ 0
> > ENDIF
> > ;-------------------------------
> > FuncDig ;---Funções de Dígito
> > call RdNTel
> > decf DskDig,w
> >
> > ====> é isso que eu quero:
> > IFDEF CONV_DTMF ;-------Placa convertida
> > VERSAO set VERSAO-2; Versao
> > DOUT_TRI equ 0
> > ENDIF
> > ;-------------------------------
> > FuncDig ;---Funções de Dígito
> > call RdNTel
> > decf DskDig,w
> >
> > Fiz este comando... com as tuas dicas e do site só sed. Talvez você
> > possa me ajudar a arrumar melhor ;-)
> >
> > $ cat testepic.asm | sed '/^\s*\w*\s*equ\|set.*/s/^\s\+//'
> >
> > Obrigado pela dicas,
> > Alain
> >
> >
> > jimmy escreveu:
> >> On Wed, Jun 10, 2009 at 05:55:44PM -0300, Alain Mouette wrote:
> >>
> >>> Oi, eu preciso fazer um pre-processador para um compilador assembler com
> >>> sintaxe mais antiga.
> >>>
> >>> Me deem alguma dica pois estou muito perdido para começar, nem sei se
> >>> seria melhor SED ou AWK... depois eu elaboro em cima :)
> >>>
> >>> Descrevendo em português:
> >>> - Se uma linha Começa com alguns espaços
> >>> - e a segunda palavra for equ ou set
> >>>
> >> seria numa linha só então?
> >>
> >>
> >>> - então os espaços iniciais devem ser removidos
> >>> - todo o resto é copiado como está
> >>>
> >> sed 's/^\s\+\(equ\|set\)/\1/' arquivo
> >>
> >>
> >>> obrigado,
> >>> Alain
> >>>
> >>>
> >>> ------------------------------------
--
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------
Oi Jimmy,
obrigado :) agora entendi... e a solução com parenteses ficou bom melhor...
Abraços,
Alain
jimmy escreveu:
> inseri essas linhas no arquivo de exemplo para fazer testes e ficou
> assim:
>
> $ cat testepic.asm
> IFDEF CONV_DTMF ;-------Placa convertida
> VERSAO set VERSAO-2; Versao
> DOUT_TRI equ 0
> ENDIF
> ;-------------------------------
> FuncDig ;---Funções de Dígito
> call RdNTel
> decf DskDig,w
>
> incf RState,f ;19; prox. estado (8 seta o bit 3)
> movwf CCP1CON ; PWM: Compare mode, set output
>
> considerando que o "equ|set" tem que ser a segunda palavra, você pode
> fazer o seguinte:
>
> sed 's/^\s\+\(\w\+\s\+\(equ\|set\)\b\)/\1/' testepic.asm
>
> no seu comando o uso do "*" tornou opcional a existência de espaços e da
> palavra que você estava testando, nesse comando que lhe enviei a palavra
> e os espaços são obrigatórios.
>
> se ainda precisar remover os espaços antes do "equ|set", considero
> que seria mais simples fazer separado:
>
> sed 's/^\s\+\(\w\+\s\+\(equ\|set\)\b\)/\1/;s/^\s\+\(equ\|set\)\b/\1/'
testepic.asm
>
>
>
> On Wed, Jun 10, 2009 at 11:58:22PM -0300, Alain Mouette wrote:
>> lá vou eu respondendo a mim mesmo...
>>
>> infelizmente ainda não funcionou. O problema é que as linhas:
>> incf RState,f ;19; prox. estado (8 seta o bit 3)
>> movwf CCP1CON ; PWM: Compare mode, set output
>>
>> têm "set" no meio e não pode tirar o espaço no começo (e outros casos
>> semelhantes).
>>
>> Então o set|equ tem que estar na *segunda* palavra. Coisa que achava que
>> o comando fazia, já que o "\w" não inclui espaços.
>>
>> Dessa vez fiquei sem ideias de novo
>>
>> Alain
>>
>> Alain Mouette escreveu:
>>> tentei ser claro e esqueci do exemplo... e já consegui alguma coisa :)
>>> (desculpe se o exemplo ficou meio grande)
>>>
>>> $ cat testepic.asm
>>> IFDEF CONV_DTMF ;-------Placa convertida
>>> VERSAO set VERSAO-2; Versao
>>> DOUT_TRI equ 0
>>> ENDIF
>>> ;-------------------------------
>>> FuncDig ;---Funções de Dígito
>>> call RdNTel
>>> decf DskDig,w
>>>
>>> ====> é isso que eu quero:
>>> IFDEF CONV_DTMF ;-------Placa convertida
>>> VERSAO set VERSAO-2; Versao
>>> DOUT_TRI equ 0
>>> ENDIF
>>> ;-------------------------------
>>> FuncDig ;---Funções de Dígito
>>> call RdNTel
>>> decf DskDig,w
>>>
>>> Fiz este comando... com as tuas dicas e do site só sed. Talvez você
>>> possa me ajudar a arrumar melhor ;-)
>>>
>>> $ cat testepic.asm | sed '/^\s*\w*\s*equ\|set.*/s/^\s\+//'
>>>
>>> Obrigado pela dicas,
>>> Alain
>>>
>>>
>>> jimmy escreveu:
>>>> On Wed, Jun 10, 2009 at 05:55:44PM -0300, Alain Mouette wrote:
>>>>
>>>>> Oi, eu preciso fazer um pre-processador para um compilador assembler com
>>>>> sintaxe mais antiga.
>>>>>
>>>>> Me deem alguma dica pois estou muito perdido para começar, nem sei se
>>>>> seria melhor SED ou AWK... depois eu elaboro em cima :)
>>>>>
>>>>> Descrevendo em português:
>>>>> - Se uma linha Começa com alguns espaços
>>>>> - e a segunda palavra for equ ou set
>>>>>
>>>> seria numa linha só então?
>>>>
>>>>
>>>>> - então os espaços iniciais devem ser removidos
>>>>> - todo o resto é copiado como está
>>>>>
>>>> sed 's/^\s\+\(equ\|set\)/\1/' arquivo
>>>>
>>>>
>>>>> obrigado,
>>>>> Alain
>>>>>
>>>>>
>>>>> ------------------------------------
>
Saudações a todos.
Preciso montar uma expressão regular que me retorne o conteúdo (ou conteúdos) de
um comando SQL delimitad por chaves.
Por exemplo:
sentença: select {campo1}, {campo2} from {tabela1}
retorno: campo1 campo2 tabela1
Estou utilizando a linguagem C#.
Desde já, agradeço.
On Wed, Jun 24, 2009 at 02:42:02AM -0000, josepaulolima wrote:
> Saudações a todos.
> Preciso montar uma expressão regular que me retorne o conteúdo (ou conteúdos)
de um comando SQL delimitad por chaves.
> Por exemplo:
> sentença: select {campo1}, {campo2} from {tabela1}
> retorno: campo1 campo2 tabela1
>
> Estou utilizando a linguagem C#.
> Desde já, agradeço.
>
> ------------------------------------
você pode fazer o seguinte:
echo 'select {campo1}, {campo2} from {tabela1}' | sed
's/^[^{]*{\|}[^}]*$//g;s/}[^{]\+{/ /g'
ou seja, em vez de tentar separar os campos do resto do texto,
simplesmente apagar o que não quer.
--
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------
Saudações,
Obrigado pela dica. No entanto, ainda não consegui resolver o que preciso.
Para utilizar na classe em C#, preciso da expressão que retorna somente a
palavra entre chaves, para que a aplicação funcione.
José Paulo
--- Em sed-br@..., jimmy <ronaldo_tgz@...> escreveu
>
> On Wed, Jun 24, 2009 at 02:42:02AM -0000, josepaulolima wrote:
> > Saudações a todos.
> > Preciso montar uma expressão regular que me retorne o conteúdo (ou
conteúdos) de um comando SQL delimitad por chaves.
> > Por exemplo:
> > sentença: select {campo1}, {campo2} from {tabela1}
> > retorno: campo1 campo2 tabela1
> >
> > Estou utilizando a linguagem C#.
> > Desde já, agradeço.
> >
> > ------------------------------------
>
>
> você pode fazer o seguinte:
>
> echo 'select {campo1}, {campo2} from {tabela1}' | sed
's/^[^{]*{\|}[^}]*$//g;s/}[^{]\+{/ /g'
>
> ou seja, em vez de tentar separar os campos do resto do texto,
> simplesmente apagar o que não quer.
>
>
> --
> "Não manejo bem as palavras
> Mas manipulo bem as strings."
> ------------------------------
>
Bem eu faria assim: *(?<=\{)[^\}]+?(?=\})*
agora como isso fica em C# não faço ideia...
tenta ver isso
http://www.c-sharpcorner.com/UploadFile/sushmita_kumari/Regex103292006084251AM/R\
egex1.aspx
josepaulolima escreveu:
>
>
> Saudações,
>
> Obrigado pela dica. No entanto, ainda não consegui resolver o que preciso.
> Para utilizar na classe em C#, preciso da expressão que retorna
> somente a palavra entre chaves, para que a aplicação funcione.
>
> José Paulo
>
> --- Em sed-br@... <mailto:sed-br%40yahoogrupos.com.br>,
> jimmy <ronaldo_tgz@...> escreveu
> >
> > On Wed, Jun 24, 2009 at 02:42:02AM -0000, josepaulolima wrote:
> > > Saudações a todos.
> > > Preciso montar uma expressão regular que me retorne o conteúdo (ou
> conteúdos) de um comando SQL delimitad por chaves.
> > > Por exemplo:
> > > sentença: select {campo1}, {campo2} from {tabela1}
> > > retorno: campo1 campo2 tabela1
> > >
> > > Estou utilizando a linguagem C#.
> > > Desde já, agradeço.
> > >
> > > ------------------------------------
> >
> >
> > você pode fazer o seguinte:
> >
> > echo 'select {campo1}, {campo2} from {tabela1}' | sed
> 's/^[^{]*{\|}[^}]*$//g;s/}[^{]\+{/ /g'
> >
> > ou seja, em vez de tentar separar os campos do resto do texto,
> > simplesmente apagar o que não quer.
> >
> >
> > --
> > "Não manejo bem as palavras
> > Mas manipulo bem as strings."
> > ------------------------------
> >
>
>
--
Na matemática, não há controvérsias verdadeiras.
Gauss, Carl Friedrich
[As partes desta mensagem que não continham texto foram removidas]