[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]