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

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

Re: [shell-script] Pegar somente o nome completo


From: Julio C. Neves
Subject: Re: [shell-script] Pegar somente o nome completo
Date: Mon, 24 Mar 2014 19:41:03 -0300

Peraí Junior,
algo errado! As duas soluções que usam sed não devem estar no loop de while. Basta fazer

NOME=`sed 's/^[^ ]* //;s/ [^ ]*$//' /nome/do/arquivo`
ou
NOME=`sed -r 's/ *$//;s/[0-9]+ (.*) .*/\1/' /nome/do/arquivo`

O sed edita um arquivo inteiro de uma tacada. Vou emular um arquivo com seus dados de 2 formas diferentes:

$ echo "101 Fulano de Tal Habilitado 01/01/1970 
102 Donald Fauntleroy Duck 09/06/1934
103 Patinhas McPato 12/04/1867
104 Mickey Mouse 18/11/1928
105 Dippy Dawg 25/05/1932" | sed -r 's/ *$//;s/[0-9]+ (.*) .*/\1/'
Fulano de Tal Habilitado
Donald Fauntleroy Duck
Patinhas McPato
Mickey Mouse
Dippy Dawg

$ sed -r 's/ *$//;s/[0-9]+ (.*) .*/\1/' <<< "101 Fulano de Tal Habilitado 01/01/1970 
102 Donald Fauntleroy Duck 09/06/1934
103 Patinhas McPato 12/04/1867
104 Mickey Mouse 18/11/1928
105 Dippy Dawg 25/05/1932"
Fulano de Tal Habilitado
Donald Fauntleroy Duck
Patinhas McPato
Mickey Mouse
Dippy Dawg

Repare que todo o texto foi editado de uma só tacada.

Abcs,
Julio
@juliobash

Próximos cursos de Shell

Cidade

Local

Período

Rio de Janeiro

EDX

07-11/04

Dou treinamento de shell em qualquer cidade.
Para detalhes, entre em contato por email ou
echo 436233889341364416673541503686485725801923229706P | dc 



Em 24 de março de 2014 14:48, <address@hidden> escreveu:
 

 Olá pessoal,
   Mais uma vez agradeço a todos pelas opiniões. Júlio esse da inversão também foi bem interessante e saber como o shell nos dá infinitas possibilidades para chegarmos a um resultado. Muito legal. Peguei algumas das opções e realizei alguns testes para saber qual era o mais rápido. Abaixo, segue o script tendo ao lado de cada comando o resultado da velocidade da execução do script utilizando o comando "time ./pegarNome.sh"

pegarNome.sh
#!/bin/bash
cat agrs | while read LINHA
do
        #NOME="`echo ${LINHA% *} | cut -d" " -f2-`" # Executado em: 20s.
        #NOME="`sed 's/^[^ ]* //;s/ [^ ]*$//' <<< $LINHA`" #Executado em:22s.
        #NOME="`sed -r 's/ *$//;s/[0-9]+ (.*) .*/\1/' <<< $LINHA`" #Executado em 0m0.023s. Algumas vezes chegou a ser executado em 0.011s, 0.012s e 0.013s
        #NOME="`cut -f2- -d' ' <<<$LINHA | rev | cut -f2- -d' ' | rev`" # Executado em 0m0.028s. Algumas vezes chegou a ser executado em 0.014s, 0.015s, 0.016s, 0.018s, 0.019s, 0.021s, 0.027s, 0.029s, 0.030s, 0.031s e 0.061s. Esse é bem variável
        saida=$(echo ${LINHA#* }); echo "\"${saida% *}\"" #Executado em 0m0.010s. Algumas vezes chegou a ser executado em 0.005s, 0.006s e 0.008s
        #echo $NOME
done

  Eu preciso conhecer mais sobre o funcionamento desse comando sed. É um comando muito poderoso.

Um forte abraço a todos,
Junior Reis.



reply via email to

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