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

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

Re: [shell-script] [Shell] - Ajuda


From: phfbettega
Subject: Re: [shell-script] [Shell] - Ajuda
Date: Sun, 31 Jul 2016 02:19:39 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0

É verdade, vc tem razão. Não pensei em termos de campo, pensei na segunda 
ocorrência,
que claramente nem sempre vai ser o quinto campo.
O Vitor pensou do jeito certo, em campos.

Tentei uma solução com awk, mas tive que recolocar o separador na saída,
não sei se esse é o jeito certo de fazer no awk.

echo '"2885" "2" "50" "ALO" "2" "3"
"2885" "2" "50" "ALO GENTE" "2" "3"
"2222" "2" "90" "oioi" "1" "99" "2"'|
awk -F'" "' '{if ($5 == 2){sub("2","3",$5)}; for(i=1;i<NF;i++){printf 
"%s%s",$i,FS}; print $i}'
"2885" "2" "50" "ALO" "3" "3"
"2885" "2" "50" "ALO GENTE" "3" "3"
"2222" "2" "90" "oioi" "1" "99" "2"

Abraços Paulo Bettega

On 30-07-2016 23:30, Vinicius Xavier address@hidden [shell-script] wrote:


Boa noite pessoal,

Paulo dessa forma se eu tiver outro campo sem ser o quinto com o valor 2, ele 
troca para 3.

No caso abaixo, ele trocou o ultimo campo da ultima linha.
cat texto.txt
"2885" "2" "50" "ALO" "2" "3"
"2885" "2" "50" "ALO GENTE" "2" "3"
"2222" "2" "90" "oioi" "1" "99" "2"

cat texto.txt | sed 's/"2"/"3"/2'
"2885" "2" "50" "ALO" "3" "3"
"2885" "2" "50" "ALO GENTE" "3" "3"
"2222" "2" "90" "oioi" "1" "99" "3"

Agora da forma do Victor funcionou

sed -r "s/(^\".*\" \".*\" \".*\" \".*\" \")2(\" \".*\")/\13\2/g" texto.txt
"2885" "2" "50" "ALO" "3" "3"
"2885" "2" "50" "ALO GENTE" "3" "3"
"2222" "2" "90" "oioi" "1" "99" "2"

Victor, poderia me explicar, ou indicar um site com explicação da regex?

Obrigado aos dois.

Att.,
Vinícius Xavier da Silva



Em Sexta-feira, 29 de Julho de 2016 13:06, "Victor Salustrino Bezerra address@hidden 
[shell-script]"
<address@hidden> escreveu:



Encontrei esta solução, mas acho que ainda dá para melhorar o trecho antes do 
"2" para ficar menor. Deste
jeito já está funcionando mas o arquivo tem que estar no formato exato que você 
mostrou. Coloquei o conteúdo
no arquivo teste.txt e executei o seguinte comando:

sed -r "s/(^\".*\" \".*\" \".*\" \".*\" \")2(\" \".*\")/\13\2/g" teste.txt

espero ter ajudado!

Em 29 de julho de 2016 10:33, Vinicius Xavier address@hidden
<mailto:address@hidden> [shell-script] <address@hidden
<mailto:address@hidden>> escreveu:

    __

    Bom dia pessoal,

    Poderiam dar uma ajuda nesse caso?

    Como alterar o valor 2 para 3 em determinada campo? Somente para esse 
campo, no caso abaixo o campo 5.

    Entrada:
    "2885" "2" "50" "ALO" "2" "3"
    "2885" "2" "50" "ALO GENTE" "2" "3"

    Saída
    "2885" "2" "50" "ALO" "3" "3"
    "2885" "2" "50" "ALO" "3" "3"

    Att.,
    Vinícius Xavier





--
Victor Salustrino Bezerra



--------------------------------------------------------------------------------------------------------------
Enviado por: Vinicius Xavier <address@hidden>
--------------------------------------------------------------------------------------------------------------


reply via email to

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