Manipular texto com Sed/Awk [RESOLVIDO]

1. Manipular texto com Sed/Awk [RESOLVIDO]

Osama Jr.
/bin/laden

(usa Void Linux)

Enviado em 04/09/2020 - 11:43h

E aí galera, de boas!? Preciso duma força com Sed/Awk. Tenho um arquivo com o seguinte conteúdo:

SERVER {
PROXY1='192.168.1.254'
PROXY2='192.168.2.254'
}

PORT {
PROXY1=3128
PROXY2=3128
}


Como fazer pra que o conteúdo desse arquivo vire isso:

SERVER_PROXY1='192.168.1.254'
SERVER_PROXY2='192.168.2.254'

PORT_PROXY1=3128
PORT_PROXY2=3128


Alguém pode dar um help? :)


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/09/2020 - 19:55h

/bin/laden escreveu:

E aí galera, de boas!? Preciso duma força com Sed/Awk. Tenho um arquivo com o seguinte conteúdo:

SERVER {
PROXY1='192.168.1.254'
PROXY2='192.168.2.254'
}

PORT {
PROXY1=3128
PROXY2=3128
}


Como fazer pra que o conteúdo desse arquivo vire isso:

SERVER_PROXY1='192.168.1.254'
SERVER_PROXY2='192.168.2.254'

PORT_PROXY1=3128
PORT_PROXY2=3128


Alguém pode dar um help? :)

Boa noite Bin/Laden,
Segue sugestão:
sed -nr "/\.[0-9]+'$/s/^\t+/SERVER_/p;/[0-9]+$/s/^\t+/PORT_/p;s/^$//p" texto
SERVER_PROXY1='192.168.1.254'
SERVER_PROXY2='192.168.2.254'

PORT_PROXY1=3128
PORT_PROXY2=3128

Como funciona:
A linha que termina com .Números', troque as "tabs" do início, por "SERVER_"
E, a linha que termina com Números, troque as "tabs" do início por "PORT_"
O ultimo "sed", "imprime" a linha "vazia"
Ou:
sed -nr "/'$/s/\t+/SERVER_/p;/^$/p;/[^']$/s/\t+/PORT_/p" texto 

É isso....
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________

3. Re: Manipular texto com Sed/Awk

João Cláudio de Alcântara
aguamole

(usa Lubuntu)

Enviado em 04/09/2020 - 13:19h

Assim:
$ cat /arquivo | cut -dP -f2 | sed '1d;4d;6d;9d;s/^/P/' | sed '3s/P//' >/arquivo 
É claro que como eu não sei onde esta o arquivo que você quer modificar então eu usei o exemplo "/arquivo" você mesmo tera que aplicar o redirecionamento.

Akw eu não sei usar é uma linguagem de programação.

CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.


4. Re: Manipular texto com Sed/Awk [RESOLVIDO]

Mauricio Ferrari
mauricio123

(usa Slackware)

Enviado em 04/09/2020 - 17:36h


$ cat test | sed '1d;4d;6d;9d' | cut -c 3- | sed '1s/^/SERVER_/;2s/^/SERVER_/;4s/^/PORT_/;5s/^/PORT_/'

SERVER_PROXY1='192.168.1.254'
SERVER_PROXY2='192.168.2.254'

PORT_PROXY1=3128
PORT_PROXY2=3128



___________________________________________________________
Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento



5. Re: Manipular texto com Sed/Awk [RESOLVIDO]

Mauricio Ferrari
mauricio123

(usa Slackware)

Enviado em 04/09/2020 - 17:38h


Eu queria fazer aquela parafernália do sed melhor, mas foi o que eu consegui.

___________________________________________________________
Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento



6. Re: Manipular texto com Sed/Awk

João Cláudio de Alcântara
aguamole

(usa Lubuntu)

Enviado em 04/09/2020 - 18:30h

Não vi o server e o port ^^
Se você rodo o que eu passei é só rodar o final do comando do Mauricio que é o que fico faltando:
cat /arquivo | sed '1s/^/SERVER_/;2s/^/SERVER_/;4s/^/PORT_/;5s/^/PORT_/' >/arquivo 


CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.


7. Re: Manipular texto com Sed/Awk [RESOLVIDO]

Mauricio Ferrari
mauricio123

(usa Slackware)

Enviado em 04/09/2020 - 20:18h


Só com sed, muito bom.

___________________________________________________________
Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento



8. Re: Manipular texto com Sed/Awk

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/09/2020 - 20:37h

Somente com awk, achei mais "complicado".....
awk '{gsub("[\t]","");if(/.[0-9]+/) print "SERVER_"$0;else if(/^$/)print;else if(/[0-9]+$/) print "PORT_"$0}' texto
SERVER_PROXY1='192.168.1.254'
SERVER_PROXY2='192.168.2.254'

PORT_PROXY1=3128
PORT_PROXY2=3128

Ou:
awk 'BEGIN{RS="\n\n";FS="\n";OFS="\n";ORS=RS;} {gsub("\t","");gsub(" {","_");print $1 $2"\n"$1 $3}' texto
SERVER_PROXY1='192.168.1.254'
SERVER_PROXY2='192.168.2.254'

PORT_PROXY1=3128
PORT_PROXY2=3128





______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


9. Re: Manipular texto com Sed/Awk [RESOLVIDO]

Mauricio Ferrari
mauricio123

(usa Slackware)

Enviado em 06/09/2020 - 00:03h


Nunca vi uma linha em awk mais curta que uma linha feita em sed, fazendo a mesma coisa.

___________________________________________________________
Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento



10. Re: Manipular texto com Sed/Awk [RESOLVIDO]

Osama Jr.
/bin/laden

(usa Void Linux)

Enviado em 09/09/2020 - 10:26h

Vlw Oliver. A versão com Sed é mais limpa.

---
echo 1244394795515721490698P | dc


11. Re: Manipular texto com Sed/Awk [RESOLVIDO]

Mauricio Ferrari
mauricio123

(usa Slackware)

Enviado em 09/09/2020 - 17:28h


Também achei mais limpa.

___________________________________________________________
Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento