formatando e quebrando linhas com sed[RESOLVIDO]

1. formatando e quebrando linhas com sed[RESOLVIDO]

Jean César
dark777

(usa Slackware)

Enviado em 07/01/2018 - 02:34h

wiki.anon

E ae galera beleza?

estava estudando ums comandos de exportação de tabelas no mysql esses dias e ums dos comandos
salva os dados em uma unica linha no arquivo de texto da seguinte forma abaixo:

"1";"Boi Preto";"2000-02-29";"2";"Sol Nascente";"2009-10-01";"3";"Parque Belo";"2007-03-15";"4";"Pedras Bonitas";"2017-12-12";"5";"Medeiros";"2011-06-22";
os outros comandos salvam de forma diferente mas por questoes de teste realizei o comando que salva,
os dados no formato acima.

Mas pra reinserir devolta fazendo a importação precisava formatar essa linha deixando ela assim:

;1;Boi Preto;2000-02-29;
;2;Sol Nascente;2009-10-01;
;3;Parque Belo;2007-03-15;
;4;Pedras Bonitas;2017-12-12;
;5;Medeiros;2011-06-22;

como eu faço isso com sed?


  


2. Re: formatando e quebrando linhas com sed[AJUDA]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 07/01/2018 - 18:21h

Boa tarde Dark, veja se ajuda:

echo ""1";"Boi Preto";"2000-02-29";"2";"Sol Nascente";"2009-10-01";"3";"Parque Belo";"2007-03-15";"4";"Pedras Bonitas";"2017-12-12";"5";"Medeiros";"2011-06-22";"|sed 's/\;/;\n/g'|sed 'N;N;s/\n//'|sed 'N;s/\n/;/'|sed '/^$/d'
;1;Boi Preto;2000-02-29:
;2;Sol Nascente;2009-10-01:
;3;Parque Belo;2007-03-15:
;4;Pedras Bonitas;2017-12-12:
;5;Medeiros;2011-06-22:



Explicando...
sed 's/;/;\n/g' => Troca ";" por ";\n"
sed 'N;N;s/\n//' => Junta as linhas em pares
sed 'N;s/\n/;/' => Junta as linhas em pares
sed '/^$/d' => Exclui linha vazia

Obs.: Bem provável que tenha um modo mais simples.... 
Fiquei um período afastado do bash . . .
Esqueci um pouco . . .

Att.:
Marcelo Oliver



3. Re: formatando e quebrando linhas com sed[AJUDA]

Jean César
dark777

(usa Slackware)

Enviado em 08/01/2018 - 00:39h

msoliver escreveu:

Boa tarde Dark, veja se ajuda:

echo ""1";"Boi Preto";"2000-02-29";"2";"Sol Nascente";"2009-10-01";"3";"Parque Belo";"2007-03-15";"4";"Pedras Bonitas";"2017-12-12";"5";"Medeiros";"2011-06-22";"|sed 's/\;/;\n/g'|sed 'N;N;s/\n//'|sed 'N;s/\n/;/'|sed '/^$/d'
;1;Boi Preto;2000-02-29:
;2;Sol Nascente;2009-10-01:
;3;Parque Belo;2007-03-15:
;4;Pedras Bonitas;2017-12-12:
;5;Medeiros;2011-06-22:



Explicando...
sed 's/;/;\n/g' => Troca ";" por ";\n"
sed 'N;N;s/\n//' => Junta as linhas em pares
sed 'N;s/\n/;/' => Junta as linhas em pares
sed '/^$/d' => Exclui linha vazia

Obs.: Bem provável que tenha um modo mais simples.... 
Fiquei um período afastado do bash . . .
Esqueci um pouco . . .

Att.:
Marcelo Oliver


eu executei o seu comando e funcionou deixando todas as linhas as linhas assim:

1;Boi Preto;;2000-02-29;
2;Sol Nascente;;2009-10-01;
3;Parque Belo;;2007-03-15;
4;Pedras Bonitas;;2017-12-12;
5;Medeiros;;2011-06-22;

entao vi que vc adicionou um abre aspas no inicio da linha ""1"; mas o comando de backup salvou assim "1";

com base nisso estudei o comando e criei um arquivo format.sed com a seguinte linha abaixo:

sed 's/\;/\n/g'|sed 'N;N;s/\n//'|sed 'N;s/\n//'|sed '/^$/d'|sed 's/"/;/g;s/;;/;/g'

removi o ponto e virgula de sed 's/\;/;\n/g' para sed 's/\;/\n/g',

entao adicionei essa parte extra ao fim do seu comando,
para remover os excessos de aspas e ponto e virgula:

sed 's/"/;/g;s/;;/;/g'

Entao eu fiz:

bash-4.4$ cat cadastros | ./format.sed > formatados && cat formatados
;1;Boi Preto;2000-02-29;
;2;Sol Nascente;2009-10-01;
;3;Parque Belo;2007-03-15;
;4;Pedras Bonitas;2017-12-12;
;5;Medeiros;2011-06-22;

e funcionou perfeitamente.
wiki.anon


4. Re: formatando e quebrando linhas com sed[RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 08/01/2018 - 17:51h

dark777 escreveu:

msoliver escreveu:

Boa tarde Dark, veja se ajuda:

echo ""1";"Boi Preto";"2000-02-29";"2";"Sol Nascente";"2009-10-01";"3";"Parque Belo";"2007-03-15";"4";"Pedras Bonitas";"2017-12-12";"5";"Medeiros";"2011-06-22";"|sed 's/\;/;\n/g'|sed 'N;N;s/\n//'|sed 'N;s/\n/;/'|sed '/^$/d'
;1;Boi Preto;2000-02-29:
;2;Sol Nascente;2009-10-01:
;3;Parque Belo;2007-03-15:
;4;Pedras Bonitas;2017-12-12:
;5;Medeiros;2011-06-22:



Explicando...
sed 's/;/;\n/g' => Troca ";" por ";\n"
sed 'N;N;s/\n//' => Junta as linhas em pares
sed 'N;s/\n/;/' => Junta as linhas em pares
sed '/^$/d' => Exclui linha vazia

Obs.: Bem provável que tenha um modo mais simples.... 
Fiquei um período afastado do bash . . .
Esqueci um pouco . . .

Att.:
Marcelo Oliver


eu executei o seu comando e funcionou deixando todas as linhas as linhas assim:

1;Boi Preto;;2000-02-29;
2;Sol Nascente;;2009-10-01;
3;Parque Belo;;2007-03-15;
4;Pedras Bonitas;;2017-12-12;
5;Medeiros;;2011-06-22;

entao vi que vc adicionou um abre aspas no inicio da linha ""1"; mas o comando de backup salvou assim "1";

com base nisso estudei o comando e criei um arquivo format.sed com a seguinte linha abaixo:

sed 's/\;/\n/g'|sed 'N;N;s/\n//'|sed 'N;s/\n//'|sed '/^$/d'|sed 's/"/;/g;s/;;/;/g'

removi o ponto e virgula de sed 's/\;/;\n/g' para sed 's/\;/\n/g',
adicionei ponto e virgula aqui ' sed 'N;s/\n/;/'

entao adicionei essa parte extra ao fim do seu comando,
para remover os excessos de aspas e ponto e virgula:

sed 's/"/;/g;s/;;/;/g'

Entao eu fiz:

bash-4.4$ cat cadastros | ./format.sed > formatados && cat formatados
;1;Boi Preto;2000-02-29;
;2;Sol Nascente;2009-10-01;
;3;Parque Belo;2007-03-15;
;4;Pedras Bonitas;2017-12-12;
;5;Medeiros;2011-06-22;

e funcionou perfeitamente.
wiki.anon


para complementar ... a formatação fica um pouco diferente !!!

mauricio@phantom ~ $ cat txt.txt
"1";"Boi Preto";"2000-02-29";"2";"Sol Nascente";"2009-10-01";"3";"Parque Belo";"2007-03-15";"4";"Pedras Bonitas";"2017-12-12";"5";"Medeiros";"2011-06-22";
mauricio@phantom ~ $ cat txt.txt | sed 's/;/;\n/g' | xargs -L3
1; Boi Preto; 2000-02-29;
2; Sol Nascente; 2009-10-01;
3; Parque Belo; 2007-03-15;
4; Pedras Bonitas; 2017-12-12;
5; Medeiros; 2011-06-22;
mauricio@phantom ~ $


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



5. Re: formatando e quebrando linhas com sed[RESOLVIDO]

Jean César
dark777

(usa Slackware)

Enviado em 09/01/2018 - 02:31h

Mauriciodez escreveu:

dark777 escreveu:

msoliver escreveu:

Boa tarde Dark, veja se ajuda:

echo ""1";"Boi Preto";"2000-02-29";"2";"Sol Nascente";"2009-10-01";"3";"Parque Belo";"2007-03-15";"4";"Pedras Bonitas";"2017-12-12";"5";"Medeiros";"2011-06-22";"|sed 's/\;/;\n/g'|sed 'N;N;s/\n//'|sed 'N;s/\n/;/'|sed '/^$/d'
;1;Boi Preto;2000-02-29:
;2;Sol Nascente;2009-10-01:
;3;Parque Belo;2007-03-15:
;4;Pedras Bonitas;2017-12-12:
;5;Medeiros;2011-06-22:



Explicando...
sed 's/;/;\n/g' => Troca ";" por ";\n"
sed 'N;N;s/\n//' => Junta as linhas em pares
sed 'N;s/\n/;/' => Junta as linhas em pares
sed '/^$/d' => Exclui linha vazia

Obs.: Bem provável que tenha um modo mais simples.... 
Fiquei um período afastado do bash . . .
Esqueci um pouco . . .

Att.:
Marcelo Oliver


eu executei o seu comando e funcionou deixando todas as linhas as linhas assim:

1;Boi Preto;;2000-02-29;
2;Sol Nascente;;2009-10-01;
3;Parque Belo;;2007-03-15;
4;Pedras Bonitas;;2017-12-12;
5;Medeiros;;2011-06-22;

entao vi que vc adicionou um abre aspas no inicio da linha ""1"; mas o comando de backup salvou assim "1";

com base nisso estudei o comando e criei um arquivo format.sed com a seguinte linha abaixo:

sed 's/\;/\n/g'|sed 'N;N;s/\n//'|sed 'N;s/\n//'|sed '/^$/d'|sed 's/"/;/g;s/;;/;/g'

removi o ponto e virgula de sed 's/\;/;\n/g' para sed 's/\;/\n/g',
adicionei ponto e virgula aqui ' sed 'N;s/\n/;/'

entao adicionei essa parte extra ao fim do seu comando,
para remover os excessos de aspas e ponto e virgula:

sed 's/"/;/g;s/;;/;/g'

Entao eu fiz:

bash-4.4$ cat cadastros | ./format.sed > formatados && cat formatados
;1;Boi Preto;2000-02-29;
;2;Sol Nascente;2009-10-01;
;3;Parque Belo;2007-03-15;
;4;Pedras Bonitas;2017-12-12;
;5;Medeiros;2011-06-22;

e funcionou perfeitamente.
wiki.anon


para complementar ... a formatação fica um pouco diferente !!!

mauricio@phantom ~ $ cat txt.txt
"1";"Boi Preto";"2000-02-29";"2";"Sol Nascente";"2009-10-01";"3";"Parque Belo";"2007-03-15";"4";"Pedras Bonitas";"2017-12-12";"5";"Medeiros";"2011-06-22";
mauricio@phantom ~ $ cat txt.txt | sed 's/;/;\n/g' | xargs -L3
1; Boi Preto; 2000-02-29;
2; Sol Nascente; 2009-10-01;
3; Parque Belo; 2007-03-15;
4; Pedras Bonitas; 2017-12-12;
5; Medeiros; 2011-06-22;
mauricio@phantom ~ $


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



interessante mas se eu for importar dessa forma vai dar erro no mysql,
é preciso ter o ponto e virgula antes dos Id's a nao ser que eu esteja
usando postgres para fazer a importação do arquivo, busquei estudar um comando que faça isso de forma simpels mas nao consegui.
wiki.anon


6. Re: formatando e quebrando linhas com sed[RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 09/01/2018 - 11:35h

dark777 escreveu:
interessante mas se eu for importar dessa forma vai dar erro no mysql,
é preciso ter o ponto e virgula antes dos Id's a nao ser que eu esteja
usando postgres para fazer a importação do arquivo, busquei estudar um comando que faça isso de forma simpels mas nao consegui.
wiki.anon


eu percebi que o ponto e virgula seria necessário para alguma coisa mesmo, postei mais a título de conhecimento.

No mais, como vc deu o tópico como resolvido, seria interessante vc marcar uma "melhor resposta", no caso a do Marcelo, já q foi ela que te deu a "luz" para a resolução do problema/duvida.

Abçs.

Ps: eu achei interessante esse topico seu, vou ficar martelando aqui para tentar encontrar uma maneira "mais elegante" de fazer esse tipo de formatação.

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



7. Re: formatando e quebrando linhas com sed[RESOLVIDO]

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 09/01/2018 - 12:41h

Aproveitando o comando do Maurício:
$ cat arquivo.txt 
"1";"Boi Preto";"2000-02-29";"2";"Sol Nascente";"2009-10-01";"3";"Parque Belo";"2007-03-15";"4";"Pedras Bonitas";"2017-12-12";"5";"Medeiros";"2011-06-22";

$ sed 's/;/;\n/g' arquivo.txt | xargs -L3 | sed 's/; /;/g;s/^/;/'
;1;Boi Preto;2000-02-29;
;2;Sol Nascente;2009-10-01;
;3;Parque Belo;2007-03-15;
;4;Pedras Bonitas;2017-12-12;
;5;Medeiros;2011-06-22;



8. Re: formatando e quebrando linhas com sed[RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 09/01/2018 - 13:18h

Ryuk escreveu:
$ sed 's/;/;\n/g' arquivo.txt | xargs -L3 | sed 's/; /;/g;s/^/;/'


ao invés então de escrever trocentos "|" e "sed's" em sequencia rola de fazer esse tipo de concatenação ???? ( sed 's/; /;/g;s/^/;/'' )
isso é válido para qualquer comando ???

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



9. Re: formatando e quebrando linhas com sed[RESOLVIDO]

Jean César
dark777

(usa Slackware)

Enviado em 09/01/2018 - 14:22h

Ryuk escreveu:

Aproveitando o comando do Maurício:
$ cat arquivo.txt 
"1";"Boi Preto";"2000-02-29";"2";"Sol Nascente";"2009-10-01";"3";"Parque Belo";"2007-03-15";"4";"Pedras Bonitas";"2017-12-12";"5";"Medeiros";"2011-06-22";

$ sed 's/;/;\n/g' arquivo.txt | xargs -L3 | sed 's/; /;/g;s/^/;/'
;1;Boi Preto;2000-02-29;
;2;Sol Nascente;2009-10-01;
;3;Parque Belo;2007-03-15;
;4;Pedras Bonitas;2017-12-12;
;5;Medeiros;2011-06-22;


foi o que eu fiz aqui mas eu digo coisa bem mais elegante...


wiki.anon


10. Re: formatando e quebrando linhas com sed[RESOLVIDO]

Jean César
dark777

(usa Slackware)

Enviado em 09/01/2018 - 14:26h

Mauriciodez escreveu:

dark777 escreveu:
interessante mas se eu for importar dessa forma vai dar erro no mysql,
é preciso ter o ponto e virgula antes dos Id's a nao ser que eu esteja
usando postgres para fazer a importação do arquivo, busquei estudar um comando que faça isso de forma simpels mas nao consegui.
wiki.anon


eu percebi que o ponto e virgula seria necessário para alguma coisa mesmo, postei mais a título de conhecimento.

No mais, como vc deu o tópico como resolvido, seria interessante vc marcar uma "melhor resposta", no caso a do Marcelo, já q foi ela que te deu a "luz" para a resolução do problema/duvida.

Abçs.

Ps: eu achei interessante esse topico seu, vou ficar martelando aqui para tentar encontrar uma maneira "mais elegante" de fazer esse tipo de formatação.

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------


tambem estou tentando fazer isso de forma mais elegante e simples....

wiki.anon


11. Re: formatando e quebrando linhas com sed[RESOLVIDO]

Jean César
dark777

(usa Slackware)

Enviado em 09/01/2018 - 14:42h

Mauriciodez escreveu:

Ryuk escreveu:
$ sed 's/;/;\n/g' arquivo.txt | xargs -L3 | sed 's/; /;/g;s/^/;/'


ao invés então de escrever trocentos "|" e "sed's" em sequencia rola de fazer esse tipo de concatenação ???? ( sed 's/; /;/g;s/^/;/'' )
isso é válido para qualquer comando ???

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------


nao funciona neste caso tem que ser da forma como foi proposta no comentario 2

wiki.anon


12. Re: formatando e quebrando linhas com sed[RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/01/2018 - 21:17h

dark777 escreveu:

Mauriciodez escreveu:

dark777 escreveu:
interessante mas se eu for importar dessa forma vai dar erro no mysql,
é preciso ter o ponto e virgula antes dos Id's a nao ser que eu esteja
usando postgres para fazer a importação do arquivo, busquei estudar um comando que faça isso de forma simpels mas nao consegui.
wiki.anon


eu percebi que o ponto e virgula seria necessário para alguma coisa mesmo, postei mais a título de conhecimento.

No mais, como vc deu o tópico como resolvido, seria interessante vc marcar uma "melhor resposta", no caso a do Marcelo, já q foi ela que te deu a "luz" para a resolução do problema/duvida.

Abçs.

Ps: eu achei interessante esse topico seu, vou ficar martelando aqui para tentar encontrar uma maneira "mais elegante" de fazer esse tipo de formatação.
------------------------------------------| Linux User #621728 |-----------------------------------------
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"
------------------------------------------| Linux User #621728 |-----------------------------------------

tambem estou tentando fazer isso de forma mais elegante e simples....
wiki.anon

Boa noite Mauricio.
Encontrei um "comando mais enxuto", segue:
cat arquivo.txt 
"1";"Boi Preto";"2000-02-29";"2";"Sol Nascente";"2009-10-01";"3";"Parque Belo";"2007-03-15";"4";"Pedras Bonitas";"2017-12-12";"5";"Medeiros";"2011-06-22";

sed 's/;/\n/g' arquivo.txt|paste -sd'::\n' 

Att.:
marcelo oliver







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts