Como substituir três linhas por uma?

1. Como substituir três linhas por uma?

Xerxes
xerxeslins

(usa openSUSE)

Enviado em 15/08/2013 - 11:20h

Olá amigos,

alguém aqui conhece uma solução para substituir três linhas num arquivo de texto por duas?

Complicador: duas das linhas originais são espaços em branco.

Exemplo, substituir:

texto-original-sem-modificação
[espaço em branco]
[espaço em branco]

Por:

texto-novo-com-moficicação
[espaço em branco]

Complicado, né?

Sou noob =/


  


2. Re: Como substituir três linhas por uma?

M4iir1c10
m4iir1c10

(usa Arch Linux)

Enviado em 15/08/2013 - 11:27h


echo -e "$(cat arquivo.txt | head -n 1)\n" > arquivo2.txt

onde arquivo.txt é o arquivo que contém o texto original e arquivo2.txt é o arquivo onde a informação será escrita

mv arquivo2.txt arquivo.txt

vai substituir o original com o texto final em um unico arquivo.


3. Re: Como substituir três linhas por uma?

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 15/08/2013 - 11:33h

xerxeslins escreveu:

Olá amigos,

alguém aqui conhece uma solução para substituir três linhas num arquivo de texto por duas?

Complicador: duas das linhas originais são espaços em branco.

Exemplo, substituir:

texto-original-sem-modificação
[espaço em branco]
[espaço em branco]

Por:

texto-novo-com-moficicação
[espaço em branco]

Complicado, né?

Sou noob =/


Já que você além de apagar as linhas precisa modificar o texto, você já experimentou o vi? No modo normal (onde se digitam os comandos do vi) SHIFT+J junta a linha onde o cursor está com a próxima. Ainda no modo normal, dd deleta a linha onde o cursor está.

Se você quiser usar o sed, você pode fazer o seguinte:
 $ sed "s/^$//g" 

Isso deve todas apagar as linhas vazias. Para apagar uma linha que seja um espaço em branco apenas,
 $ sed "s/^\ $//g" 

Em ambos os casos, para apagar apenas a primeira linha remova o g ao final das instruções do sed.

--
Cordialmente,
lcavalheiro - http://my.opera.com/lcavalheiro/blog/
93 93/93


4. Re: Como substituir três linhas por uma?

Xerxes
xerxeslins

(usa openSUSE)

Enviado em 15/08/2013 - 11:47h

m4iir1c10 escreveu:


echo -e "$(cat arquivo.txt | head -n 1)\n" > arquivo2.txt

onde arquivo.txt é o arquivo que contém o texto original e arquivo2.txt é o arquivo onde a informação será escrita

mv arquivo2.txt arquivo.txt

vai substituir o original com o texto final em um unico arquivo.


Olá amigo, obrigado.

mas infelizmente isso retorna:

texto-original-sem-modificação
[espaço em branco]

E deveria retornar:

texto-novo-modificado
[espaço em branco]



=/




5. Re: Como substituir três linhas por uma?

Xerxes
xerxeslins

(usa openSUSE)

Enviado em 15/08/2013 - 11:49h

lcavalheiro escreveu:

xerxeslins escreveu:

Olá amigos,

alguém aqui conhece uma solução para substituir três linhas num arquivo de texto por duas?

Complicador: duas das linhas originais são espaços em branco.

Exemplo, substituir:

texto-original-sem-modificação
[espaço em branco]
[espaço em branco]

Por:

texto-novo-com-moficicação
[espaço em branco]

Complicado, né?

Sou noob =/


Já que você além de apagar as linhas precisa modificar o texto, você já experimentou o vi? No modo normal (onde se digitam os comandos do vi) SHIFT+J junta a linha onde o cursor está com a próxima. Ainda no modo normal, dd deleta a linha onde o cursor está.

Se você quiser usar o sed, você pode fazer o seguinte:
 $ sed "s/^$//g" 

Isso deve todas apagar as linhas vazias. Para apagar uma linha que seja um espaço em branco apenas,
 $ sed "s/^\ $//g" 

Em ambos os casos, para apagar apenas a primeira linha remova o g ao final das instruções do sed.

--
Cordialmente,
lcavalheiro - http://my.opera.com/lcavalheiro/blog/
93 93/93


Obrigado tbm!
infelizmente eu queria fazer isso com um comando sem ter que recorrer ao editor.
e de preferência que se aplicasse no texto todo se o padrão se repetir no mesmo arquivo...


6. Re: Como substituir três linhas por uma?

Xerxes
xerxeslins

(usa openSUSE)

Enviado em 15/08/2013 - 11:50h

Obrigado galera... enquanto isso eu irei pesquisando e lendo sobre o assunto


7. Re: Como substituir três linhas por uma?

M4iir1c10
m4iir1c10

(usa Arch Linux)

Enviado em 15/08/2013 - 12:00h

xerxeslins escreveu:

m4iir1c10 escreveu:


echo -e "$(cat arquivo.txt | head -n 1)\n" > arquivo2.txt

onde arquivo.txt é o arquivo que contém o texto original e arquivo2.txt é o arquivo onde a informação será escrita

mv arquivo2.txt arquivo.txt

vai substituir o original com o texto final em um unico arquivo.


Olá amigo, obrigado.

mas infelizmente isso retorna:

texto-original-sem-modificação
[espaço em branco]

E deveria retornar:

texto-novo-modificado
[espaço em branco]



=/



E oque é essa modificação?
Caso seu arquivo sempre termina com 2 linhas em branco e vc quer que termine com uma só... modifique o arquivo onde o texto original ja foi modificado retirando a ultima linha.

cat arquivo.txt | head -n -1 > arquivo2.txt



8. Re: Como substituir três linhas por uma?

Xerxes
xerxeslins

(usa openSUSE)

Enviado em 15/08/2013 - 12:04h

m4iir1c10 escreveu:

xerxeslins escreveu:

m4iir1c10 escreveu:


echo -e "$(cat arquivo.txt | head -n 1)\n" > arquivo2.txt

onde arquivo.txt é o arquivo que contém o texto original e arquivo2.txt é o arquivo onde a informação será escrita

mv arquivo2.txt arquivo.txt

vai substituir o original com o texto final em um unico arquivo.


Olá amigo, obrigado.

mas infelizmente isso retorna:

texto-original-sem-modificação
[espaço em branco]

E deveria retornar:

texto-novo-modificado
[espaço em branco]



=/



E oque é essa modificação?
Caso seu arquivo sempre termina com 2 linhas em branco e vc quer que termine com uma só... modifique o arquivo onde o texto original ja foi modificado retirando a ultima linha.

cat arquivo.txt | head -n -1 > arquivo2.txt



Entendi, valeu
modifico primeiro e depois executo o comando para remover a linha dupla





9. Re: Como substituir três linhas por uma?

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 15/08/2013 - 12:06h

Ainda dá pra usar o sed:
$ cat arquivo.txt | sed "s/padrão antigo/padrão novo/" > arquivo.temp
$ cat arquivo.temp | sed d3 > arquivo.final"


Exemplo:
arquivo.txt
A velha que o trem matou morreu



Você quer trocar morreu por não morreu, então a primeira linha de comando fica
 $ cat arquivo.txt | sed -e "s/morreu/não\ morreu/" > arquivo.temp 

Aí você vai ter o
arquivo.temp
A velha que o trem matou não morreu



O segundo comando eliminaria apenas a terceira linha, composta por um simples espaço em branco. Resultado
arquivo.final
A velha que o trem matou não morreu



Pra juntar as linhas, o comando seria
 $ cat arquivo.temp | sed "s/^\ $/^\ /" > arquivo.final 


O resultado:
arquivo.final
A velha que o trem matou não morreu


--
Cordialmente,
lcavalheiro - http://my.opera.com/lcavalheiro/blog/
93 93/93


10. Re: Como substituir três linhas por uma?

Xerxes
xerxeslins

(usa openSUSE)

Enviado em 15/08/2013 - 12:08h

lcavalheiro escreveu:

Ainda dá pra usar o sed:
$ cat arquivo.txt | sed "s/padrão antigo/padrão novo/" > arquivo.temp
$ cat arquivo.temp | sed d3 > arquivo.final"


Exemplo:
arquivo.txt
A velha que o trem matou morreu



Você quer trocar morreu por não morreu, então a primeira linha de comando fica
 $ cat arquivo.txt | sed -e "s/morreu/não\ morreu/" > arquivo.temp 

Aí você vai ter o
arquivo.temp
A velha que o trem matou não morreu



O segundo comando eliminaria apenas a terceira linha, composta por um simples espaço em branco. Resultado
arquivo.final
A velha que o trem matou não morreu



Pra juntar as linhas, o comando seria
 $ cat arquivo.temp | sed "s/^\ $/^\ /" > arquivo.final 


O resultado:
arquivo.final
A velha que o trem matou não morreu


--
Cordialmente,
lcavalheiro - http://my.opera.com/lcavalheiro/blog/
93 93/93


hmm ok!
farei uns testes! Obrigado!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts