Substituir uma linha por outra [RESOLVIDO]

1. Substituir uma linha por outra [RESOLVIDO]

Sidney Soares
ssidskull

(usa Manjaro Linux)

Enviado em 26/07/2016 - 13:26h

Olá, tenho um arquivo xml e preciso trocar a ordem de algumas linhas específicas
exemplo:
quero trocar a primeira linha pela linha 43
ou a segunda pela sétima linha


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 26/07/2016 - 17:45h

ssidskull escreveu:
Opa, desculpa pela má explicação. Eu preciso que a linha "1" substitua a linha "43", e se possível apagar o conteúdo da linha 1. Preciso fazer isso com várias linhas, então se puderem explicar o comando da ação eu agradeço.


Boa tarde Sidney.
Segue uma solução/sugestão:

#!/bin/bash

FNT="SEU_ARQUIVO"
NLT=(1 5 9) #LINHA TIRA
NLP=(2 6 10) #LINHA POE

#TROCA LINHAS
if ((${#NLT[*]} == ${#NLP[*]}));then
for ((i=0;i<${#NLP[*]};i++));do
CLN=$(sed -n ''${NLP[$i]}'p' $FNT)
sed -i "${NLT[$i]}s/.*/$CLN/" $FNT
done
else
exit 1
fi

#DELETA LINHAS
for ((i=$((${#NLT[*]}-1));i>=0;i--));do
sed -i "${NLT[$i]}d" $FNT
done


NESTE EXEMPLO, AS LINHAS 1 5 9 (NLT) SERÃO SUBSTITUÍDAS PELAS 2 6 10 (NLP), RESPECTIVAMENTE.
E isso....

E não ESQUEÇA, se a resposta foi útil, MARQUE-A como A MELHOR. . .

Att.:
Marcelo Oliver


3. Re: Substituir uma linha por outra [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 26/07/2016 - 14:30h

ssidskull escreveu:

Olá, tenho um arquivo xml e preciso trocar a ordem de algumas linhas específicas
exemplo:
quero trocar a primeira linha pela linha 43
ou a segunda pela sétima linha

_--________________________________________
Boa tarde.

quero trocar a primeira linha pela linha 43
Esclareça....
O conteúdo ANTERIOR da LINHA "1" será descartado?
LINHA "1" e "43" ficam com o mesmo conteúdo, ou 43 é apagada?

No aguardo.
Marcelo Oliver



4. Re: Substituir uma linha por outra [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 26/07/2016 - 15:10h

msoliver escreveu:

quero trocar a primeira linha pela linha 43
Esclareça....



acho q ele está querendo só mudar as linhas de posição, o conteúdo da linha 1 vai para a 43 e a 43 vai para a linha 1


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


5. Re: Substituir uma linha por outra [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 26/07/2016 - 15:20h

Mauriciodez escreveu:

msoliver escreveu:
quero trocar a primeira linha pela linha 43
Esclareça....

acho q ele está querendo só mudar as linhas de posição, o conteúdo da linha 1 vai para a 43 e a 43 vai para a linha 1
___________________________________________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

___________________________________________________________________________________________
Boa tarde Mauriciodez.
Será?
Aqui não basta saber . . .
Tem que ser adivinho . . . Rsrsrsrsr

Marcelo


6. Re: Substituir uma linha por outra

Sidney Soares
ssidskull

(usa Manjaro Linux)

Enviado em 26/07/2016 - 15:34h

Opa, desculpa pela má explicação. Eu preciso que a linha "1" substitua a linha "43", e se possível apagar o conteúdo da linha 1. Preciso fazer isso com várias linhas, então se puderem explicar o comando da ação eu agradeço.


7. Re: Substituir uma linha por outra

Sidney Soares
ssidskull

(usa Manjaro Linux)

Enviado em 26/07/2016 - 19:07h

msoliver escreveu:

ssidskull escreveu:
Opa, desculpa pela má explicação. Eu preciso que a linha "1" substitua a linha "43", e se possível apagar o conteúdo da linha 1. Preciso fazer isso com várias linhas, então se puderem explicar o comando da ação eu agradeço.


Boa tarde Sidney.
Segue uma solução/sugestão:

#!/bin/bash

FNT="SEU_ARQUIVO"
NLT=(1 5 9) #LINHA TIRA
NLP=(2 6 10) #LINHA POE

#TROCA LINHAS
if ((${#NLT[*]} == ${#NLP[*]}));then
for ((i=0;i<${#NLP[*]};i++));do
CLN=$(sed -n ''${NLP[$i]}'p' $FNT)
sed -i "${NLT[$i]}s/.*/$CLN/" $FNT
done
else
exit 1
fi

#DELETA LINHAS
for ((i=$((${#NLT[*]}-1));i>=0;i--));do
sed -i "${NLT[$i]}d" $FNT
done


NESTE EXEMPLO, AS LINHAS 1 5 9 (NLT) SERÃO SUBSTITUÍDAS PELAS 2 6 10 (NLP), RESPECTIVAMENTE.
E isso....

E não ESQUEÇA, se a resposta foi útil, MARQUE-A como A MELHOR. . .

Att.:
Marcelo Oliver



Muito obrigado!! Irei marcar sim, mas só mais uma dúvida: Eu posso colocar o número das linhas como variáveis?, tipo assim:


#!/bin/bash

LINHA_X_A=10
LINHA_X_B=20
LINHA_X_C=30
LINHA_X_D=40

LINHA_Y_A=16
LINHA_Y_B=7
LINHA_Y_C=4
LINHA_Y_D=3

FNT="SEU_ARQUIVO"
NLT=('$LINHA_X_A' '$LINHA_X_B' '$LINHA_X_C' '$LINHA_X_D') #LINHA TIRA
NLP=('$LINHA_Y_A' '$LINHA_Y_B' '$LINHA_Y_C' '$LINHA_Y_D') #LINHA POE

#TROCA LINHAS
if ((${#NLT[*]} == ${#NLP[*]}));then
for ((i=0;i<${#NLP[*]};i++));do
CLN=$(sed -n ''${NLP[$i]}'p' $FNT)
sed -i "${NLT[$i]}s/.*/$CLN/" $FNT
done
else
exit 1
fi

#DELETA LINHAS
for ((i=$((${#NLT[*]}-1));i>=0;i--));do
sed -i "${NLT[$i]}d" $FNT
done



8. Re: Substituir uma linha por outra [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 26/07/2016 - 21:12h

ssidskull escreveu:
Muito obrigado!!
Irei marcar sim, mas só mais uma dúvida:
Eu posso colocar o número das linhas como variáveis?, tipo assim:

#!/bin/bash

LINHA_X_A=10
LINHA_X_B=20
LINHA_X_C=30
LINHA_X_D=40

LINHA_Y_A=16
LINHA_Y_B=7
LINHA_Y_C=4
LINHA_Y_D=3

FNT="SEU_ARQUIVO"
NLT=('$LINHA_X_A' '$LINHA_X_B' '$LINHA_X_C' '$LINHA_X_D') #LINHA TIRA
NLP=('$LINHA_Y_A' '$LINHA_Y_B' '$LINHA_Y_C' '$LINHA_Y_D') #LINHA POE

#TROCA LINHAS
if ((${#NLT[*]} == ${#NLP[*]}));then
for ((i=0;i<${#NLP[*]};i++));do
CLN=$(sed -n ''${NLP[$i]}'p' $FNT)
sed -i "${NLT[$i]}s/.*/$CLN/" $FNT
done
else
exit 1
fi

#DELETA LINHAS
for ((i=$((${#NLT[*]}-1));i>=0;i--));do
sed -i "${NLT[$i]}d" $FNT
done


Boa noite Sidney.
Eu posso colocar o número das linhas como variáveis? 

Pode sim, testei aqui e funciona.

#!/bin/bash

FNT="LINHAS.txt"
A="1";B="3";C="5";D="7";E="9"
F="2";G="4";H="6";I="8";J="10"


NLT=("$A" "$B" "$C" "$D" "$E") #LINHA TIRA
NLP=("$F" "$G" "$H" "$I" "$J") #LINHA POE

#TROCA LINHAS
if ((${#NLT[*]} == ${#NLP[*]}));then
for ((i=0;i<${#NLP[*]};i++));do
CLN=$(sed -n ''${NLP[$i]}'p' $FNT)
sed -i "${NLT[$i]}s/.*/$CLN/" $FNT
done
else
exit 1
fi

#DELETA LINHAS
for ((i=$((${#NLT[*]}-1));i>=0;i--));do
sed -i "${NLT[$i]}d" $FNT
done


cat LINHAS.txt #ANTES

LINHA_01
LINHA_02
LINHA_03
LINHA_04
LINHA_05
LINHA_06
LINHA_07
LINHA_08
LINHA_09
LINHA_10

cat LINHAS.txt #DEPOIS

LINHA_02
LINHA_04
LINHA_06
LINHA_08
LINHA_10

NÃO COLOQUE AS VARIáVEIS ENTRE 'ASPAS SIMPLES'

Att.:
Marcelo Oliver



9. Re: Substituir uma linha por outra [RESOLVIDO]

Sidney Soares
ssidskull

(usa Manjaro Linux)

Enviado em 26/07/2016 - 21:34h

ssidskull escreveu:

msoliver escreveu:

ssidskull escreveu:
Opa, desculpa pela má explicação. Eu preciso que a linha "1" substitua a linha "43", e se possível apagar o conteúdo da linha 1. Preciso fazer isso com várias linhas, então se puderem explicar o comando da ação eu agradeço.


Boa tarde Sidney.
Segue uma solução/sugestão:

#!/bin/bash

FNT="SEU_ARQUIVO"
NLT=(1 5 9) #LINHA TIRA
NLP=(2 6 10) #LINHA POE

#TROCA LINHAS
if ((${#NLT[*]} == ${#NLP[*]}));then
for ((i=0;i<${#NLP[*]};i++));do
CLN=$(sed -n ''${NLP[$i]}'p' $FNT)
sed -i "${NLT[$i]}s/.*/$CLN/" $FNT
done
else
exit 1
fi

#DELETA LINHAS
for ((i=$((${#NLT[*]}-1));i>=0;i--));do
sed -i "${NLT[$i]}d" $FNT
done


NESTE EXEMPLO, AS LINHAS 1 5 9 (NLT) SERÃO SUBSTITUÍDAS PELAS 2 6 10 (NLP), RESPECTIVAMENTE.
E isso....

E não ESQUEÇA, se a resposta foi útil, MARQUE-A como A MELHOR. . .

Att.:
Marcelo Oliver



Muito obrigado!! Irei marcar sim, mas só mais uma dúvida: Eu posso colocar o número das linhas como variáveis?, tipo assim:


#!/bin/bash

LINHA_X_A=10
LINHA_X_B=20
LINHA_X_C=30
LINHA_X_D=40

LINHA_Y_A=16
LINHA_Y_B=7
LINHA_Y_C=4
LINHA_Y_D=3

FNT="SEU_ARQUIVO"
NLT=('$LINHA_X_A' '$LINHA_X_B' '$LINHA_X_C' '$LINHA_X_D') #LINHA TIRA
NLP=('$LINHA_Y_A' '$LINHA_Y_B' '$LINHA_Y_C' '$LINHA_Y_D') #LINHA POE

#TROCA LINHAS
if ((${#NLT[*]} == ${#NLP[*]}));then
for ((i=0;i<${#NLP[*]};i++));do
CLN=$(sed -n ''${NLP[$i]}'p' $FNT)
sed -i "${NLT[$i]}s/.*/$CLN/" $FNT
done
else
exit 1
fi

#DELETA LINHAS
for ((i=$((${#NLT[*]}-1));i>=0;i--));do
sed -i "${NLT[$i]}d" $FNT
done


Descobri a solução, é só colocar as strings sem as aspas simples. Mesmo assim, muito obrigado, vai me economizar muito tempo e esforço!


10. Re: Substituir uma linha por outra [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 26/07/2016 - 21:38h

ssidskull escreveu:

ssidskull escreveu:

msoliver escreveu:

ssidskull escreveu:
Opa, desculpa pela má explicação. Eu preciso que a linha "1" substitua a linha "43", e se possível apagar o conteúdo da linha 1. Preciso fazer isso com várias linhas, então se puderem explicar o comando da ação eu agradeço.


Boa tarde Sidney.
Segue uma solução/sugestão:

#!/bin/bash

FNT="SEU_ARQUIVO"
NLT=(1 5 9) #LINHA TIRA
NLP=(2 6 10) #LINHA POE

#TROCA LINHAS
if ((${#NLT[*]} == ${#NLP[*]}));then
for ((i=0;i<${#NLP[*]};i++));do
CLN=$(sed -n ''${NLP[$i]}'p' $FNT)
sed -i "${NLT[$i]}s/.*/$CLN/" $FNT
done
else
exit 1
fi

#DELETA LINHAS
for ((i=$((${#NLT[*]}-1));i>=0;i--));do
sed -i "${NLT[$i]}d" $FNT
done


NESTE EXEMPLO, AS LINHAS 1 5 9 (NLT) SERÃO SUBSTITUÍDAS PELAS 2 6 10 (NLP), RESPECTIVAMENTE.
E isso....

E não ESQUEÇA, se a resposta foi útil, MARQUE-A como A MELHOR. . .

Att.:
Marcelo Oliver



Muito obrigado!! Irei marcar sim, mas só mais uma dúvida: Eu posso colocar o número das linhas como variáveis?, tipo assim:


#!/bin/bash

LINHA_X_A=10
LINHA_X_B=20
LINHA_X_C=30
LINHA_X_D=40

LINHA_Y_A=16
LINHA_Y_B=7
LINHA_Y_C=4
LINHA_Y_D=3

FNT="SEU_ARQUIVO"
NLT=('$LINHA_X_A' '$LINHA_X_B' '$LINHA_X_C' '$LINHA_X_D') #LINHA TIRA
NLP=('$LINHA_Y_A' '$LINHA_Y_B' '$LINHA_Y_C' '$LINHA_Y_D') #LINHA POE

#TROCA LINHAS
if ((${#NLT[*]} == ${#NLP[*]}));then
for ((i=0;i<${#NLP[*]};i++));do
CLN=$(sed -n ''${NLP[$i]}'p' $FNT)
sed -i "${NLT[$i]}s/.*/$CLN/" $FNT
done
else
exit 1
fi

#DELETA LINHAS
for ((i=$((${#NLT[*]}-1));i>=0;i--));do
sed -i "${NLT[$i]}d" $FNT
done


Descobri a solução, é só colocar as strings sem as aspas simples. Mesmo assim, muito obrigado, vai me economizar muito tempo e esforço!


Sidney.
Eu postei a resposta para essa pergunta..... Rsrsrsrsr

Att.:
Marcelo




11. Re: Substituir uma linha por outra [RESOLVIDO]

Sidney Soares
ssidskull

(usa Manjaro Linux)

Enviado em 26/07/2016 - 23:11h



Sidney.
Eu postei a resposta para essa pergunta..... Rsrsrsrsr

Att.:
Marcelo



Ih! nem vi, desculpa hehe ^-^'
mais uma vez, obrigado!


12. Re: Substituir uma linha por outra [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/07/2016 - 18:02h

Boa noite Sidney.
Tem CORREÇãO na parte "DELETA LINHAS".
Substitua TODO CONTEúDO DE "DELETA LINHAS", por esse abaixo
"DELETA LINHAS"
LD=$(for ((i=0;i<${#NLT[*]};i++));do echo ${NLP[$i]}; done|sort -h -r)
for Y in $LD;do
sed -i "${Y}d" $FNT
done


Essa correção é para colocar as linhas em ORDEM DECRESCENTE.
Att.:
Marcelo Oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts