shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Expressão regular com o sed


From: Rodrigo Boechat
Subject: Re: [shell-script] Expressão regular com o sed
Date: Mon, 05 Mar 2012 17:42:33 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.2) Gecko/20120216 Thunderbird/10.0.2

Eu não fiz a expressão converter nada para maiúsculo.
Eu tinha entendido que você precisava apenas da segunda coluna.

A expressão que eu fiz é dividida em três partes:
s/((.*;){2}.*)/\2/ --- s/;//g --- /^[[:upper:]]{3} /d

A primeira:
s/((.*;){2}.*)/\2/
Se você executá-la sozinha com o "sed -r" vai ver que ela retorna 
somente a segunda coluna.

A segunda:
s/;//g
Se você executá-la sozinha com o "sed -r" vai ver que ela apenas remove 
os ponto-vírgulas.

A terceira:
/^[[:upper:]]{3} /d
Se você executá-la com o "sed -r", trocando o circunflexo por 
ponto-vírgula, vai ver que ela remove as linhas que tenham ";ABC ".

Logo, se você quer o seguinte retorno:
daniel.souza;DANIEL EDILSON DE SOUZA;Daniel Edilson de Souza
regiane.fernandes;REGIANE DOMINGUES FERNANDES;Regiane Domingues Fernandes
leandro.novy;LEANDRO AUGUSTO SILVA NOVY;Leandro Augusto Silva Novy
emerson.bustamante;EMERSON ROGER BUSTAMANTE;Emerson Roger Bustamante

Apenas execute o sed com a ultima expressão adaptada.
Testei e funcionou aqui.

* Note que no exemplo que você passou, toda linha que inicia com "abc;" 
possui em seguida "ACB " e ";Abc ". Assim, se o exemplo abranger todos 
os casos peculiares, você poderá adaptar a expressão para procurar pelo 
primeiro e terceiro caso, se você achar melhor.

Agora me diga. Você chegou a estudar a expressão que eu passei?
Você falou uma coisa nada haver com o que eu fiz.
Se não tivesse entendido alguma coisa era melhor ter pedido explicações 
mais detalhadas.
Compreendeu o que cada parte significa?
Quer explicações de como as expressões citadas funcionam?

Abração!
Espero ter ajudado.



Em 05-03-2012 14:20, Adonai Silveira Canez escreveu:
> Rodrigo, ainda não saiu do jeito que eu estou precisando, olha só o que eu
> preciso: aquela segunda coluna, tem linhas com os nomes escritos totalmente
> em maisculas e outros nomes escritos em maiusculas e minusculas, eu preciso
> que a expressão regular selecione apenas as linhas que estão apenas em
> maiusculas e alem disso as que estão em maiscula e que tenha mais de 3
> caracteres na palavra inicial, a expressão que você fez, pelo resultado que
> ela me forneceu, ela esta convertendo todos os nomes para maiusculo e não
> selecionando aquelas que estão em maiusculo:
>
> Exemplo de linhas que devem aparecer no resultado
> daniel.souza;DANIEL EDILSON DE SOUZA;Daniel Edilson de Souza
> regiane.fernandes;REGIANE DOMINGUES FERNANDES;Regiane Domingues Fernandes
> leandro.novy;LEANDRO AUGUSTO SILVA NOVY;Leandro Augusto Silva Novy
> emerson.bustamante;EMERSON ROGER BUSTAMANTE;Emerson Roger Bustamante
>
> Exemplo de linhas que não podem aparecer no resultado:
> ssd;SSD SSD;Ssd Ssd
> negocios.defesa;GSN SUPORTE A NEGOCIOS;Gsn Suporte a Negocios
> negocios.social;GSN SUPORTE A NEGOCIOS;Gsn Suporte a Negocios
> negocios.governo;GSN SUPORTE A NEGOCIOS;Gsn Suporte a Negocios
>
> Todas essa linhas tem apenas 3 caracteres na palavra inicial (SSD e GSN)
>
>
>
> Em 5 de março de 2012 11:27, Rodrigo Boechat<
> address@hidden>  escreveu:
>
>> **
>>
>>
>> Esqueci de falar que eu usei o "-r" agora. Ele torna desnecessário o uso
>> da "contra-barra" e habilita outras coisas interessantes. Acho que vale
>> a pena estudar a opção.
>> :)
>>
>> Em 05-03-2012 11:20, Rodrigo Boechat escreveu:
>>
>>> Realmente tinha entendido errado.
>>> Tente essa:
>>> sed -r "s/((.*;){2}.*)/\2/;s/;//g;/^[[:upper:]]{3} /d" teste
>>>
>>> Explicando:
>>> As "contra-barras" são para informar ao sed que o próximo caractere
>>> não deve ser tratado como caractere de controle do próprio sed. Há
>>> expressões, do sed, que você poderá usar "\{3\}" para contar 3
>>> caracteres e "{}" para delimitar uma área de execução.
>>> Não sei se fui completamente claro...
>>>
>>> Em 05-03-2012 10:56, Adonai Silveira Canez escreveu:
>>>> Rodrigo, infelizmente não funcionou, de repente o meu exemplo não foi
>> bem
>>>> explicado, vou tentar explicar melhor.
>>>> O arquivo que estou manipulado tme o nome das pessoas na segunda coluna,
>>>> como pode-se ver naquele exemplo que eu passei, nessa coluna existe
>> nome de
>>>> pessoas escrito totalmente em maiusculo e nomes de pessoas que estão
>>>> escritos com a primeira letra maiuscula e as demais em minusculo. Eu
>>>> preciso pegar apenas os nomes que estão com todas as letras em
>> maisuculo e
>>>> que tenham na primera palavra do nome 4 ou mais letras.
>>>>
>>>> Eu não consegui entender o tua expressão, gostaria de saber qua a
>> utilidade
>>>> do \ antes dos ( no \{2\} isso é para as chaves serem reconhecidas como
>>>> caracter especial??
>>>>
>>>>
>>>> Em 5 de março de 2012 10:45, Rodrigo Boechat<
>>>> address@hidden>  escreveu:
>>>>
>>>>> **
>>>>>
>>>>>
>>>>> Veja se essa linha te ajuda.
>>>>> sed "s/\(\(.*;\)\{2\}.*\)/\2/;s/;//g;s/^\([[:upper:]]\{3\}
>>>>> \)\([[:upper:]]*\)/\2/" teste
>>>>>
>>>>> "teste" é o arquivo com os dados que você passou como exemplo.
>>>>>
>>>>> Abraço!
>>>>>
>>>>> Em 05-03-2012 10:18, Adonai Silveira Canez escreveu:
>>>>>
>>>>>> Pessoal, preciso de uma ajuda com mais uma expressão regular, coisas
>>>>>> básicas eu já estou conseguindo fazer, mas essa eu não estou
>> acertando,
>>>>> um
>>>>>> dos problema é que não sei como especificar que algumas coisas. Abaixo
>>>>>> está
>>>>>> o resultado da minha consulta, o problema é que eu preciso que no
>>>>>> resultado
>>>>>> não apareca os nomes que no inicio (após a primeira virgula) tenha
>>>>>> apenas 3
>>>>>> letras maiusculas, tipo: os 3 primeiros GSN SUPORTE A NEGOCIOS e GPC
>>>>>> GERENCIA DE PLANEJAMENTO E CONTROLE DE PRODUCAO, como eu faço para
>> criar
>>>>>> uma culta que pegua apenas as palavras que tenham 4 um mais letras
>>>>>> maiusculas seguido por um espaço e após outras letras maiusculas e
>> outros
>>>>>> espaços, básicamente é para pegar apenas as pessoas que tem no minimo
>>>>> dois
>>>>>> nomes que estejam com todas as letras escritas em maiusculo.
>>>>>>
>>>>>> cat temp2.txt | sed -n -r '/.*;[[:upper:] ]*;.*/p'
>>>>>>
>>>>>> negocios.defesa;GSN SUPORTE A NEGOCIOS;Gsn Suporte a Negocios
>>>>>> negocios.social;GSN SUPORTE A NEGOCIOS;Gsn Suporte a Negocios
>>>>>> negocios.governo;GSN SUPORTE A NEGOCIOS;Gsn Suporte a Negocios
>>>>>> fernando.josafa;FERNANDO JOSAFA DOS SANTOS;Fernando Josafa Dos Santos
>>>>>> nathalia.silva;NATHALIA JULIENE ALVES DA SILVA;Nathalia Juliene Alves
>> da
>>>>>> Silva
>>>>>> rayane.dieguez;RAYANE SOUZA DIEGUEZ;Rayane Souza Dieguez
>>>>>> gpc;GPC GERENCIA DE PLANEJAMENTO E CONTROLE DE PRODUCAO;Gpc Gerencia
>> de
>>>>>> Planejamento e Controle de Producao
>>>>>> rafael.monteiro;RAFAEL FLISTER MONTEIRO;Rafael Flister Monteiro
>>>>>> daniel.souza;DANIEL EDILSON DE SOUZA;Daniel Edilson de Souza
>>>>>>
>>>>>> Adonai Canez
>>>>>>
>>>>>> [As partes desta mensagem que não continham texto foram removidas]
>>>>>>
>>>>>>
>>>>> [As partes desta mensagem que não continham texto foram removidas]
>>>>>
>>>>>
>>>>>
>>>> [As partes desta mensagem que não continham texto foram removidas]
>>>>
>>>>
>>>>
>>>> ------------------------------------
>>>>
>>>> ----------------------------------------------------------
>>>> Esta lista não admite a abordagem de outras liguagens de programação,
>> como perl, C etc. Quem insistir em não seguir esta regra será moderado sem
>> prévio aviso.
>>>> ----------------------------------------------------------
>>>> Sair da lista:address@hidden
>>>> ----------------------------------------------------------
>>>> Esta lista é moderada de acordo com o previsto
>> emhttp://www.listas-discussao.cjb.net
>>
>>>> ----------------------------------------------------------
>>>> Servidor Newsgroup da lista: news.gmane.org
>>>> Grupo: gmane.org.user-groups.programming.shell.brazil
>>>>
>>>> Links do Yahoo! Grupos
>>>>
>>>>
>>>>
>> [As partes desta mensagem que não continham texto foram removidas]
>>
>>
>>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como 
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em 
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo! Grupos
>
>
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]