METACARACTERES NO SED DANDO DOR DE CABEÇA [RESOLVIDO]

1. METACARACTERES NO SED DANDO DOR DE CABEÇA [RESOLVIDO]

Sidney Soares
ssidskull

(usa Manjaro Linux)

Enviado em 27/07/2016 - 01:35h

eu tenho um arquivo xml que preciso substituir algumas linhas, mas na hora de alterar a linha dá sempre erro, devido os metacaracteres do xml
EX:
sed -i '35s/.*/<string name="BPiZbadjt6lpsQKO4wB1aerzpjVIbdqyEdUSyFud+Ps=">2lua8AcvWqd1TQsoRNa6fw==:BvUD+KlFG6OhNRNxzixOZ3Ku+qKiUl3BnHe3XzVqsDw=:LIMjC/hlXoXxrbrKUhRX63f023c9lHmOZun9uTmuNIQ=</string>
/' arquivo1.xml


Se falarem que é pra botar uma barra de escape " \ " , eu já tentei e não funcionou :/
sempre retorna com um desses erros:

sed: -e expressão #1, caractere 206: Comando `s' inacabado (s/// - faltou delimitador)
sed: -e expressão #1, caractere 39: Opção desconhecida para o comando `s' (s///?)

Ah, e mais uma coisa: Como esses xml's estão criptografados, algumas strings dentro deles sempre mudam, então estou usando o grep para encontrar constantes nas linhas do outro arquivo.
tipo:
sed -i "35s/.*/$(grep 'string_constante' 'arquivo2.xml')/" arquivo1.xml 


daí fica dicil inserir a barra de escape, já que usando o grep eu não tenho o conteudo completo da linha pra inseri-la.


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

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

ssidskull escreveu:

eu tenho um arquivo xml que preciso substituir algumas linhas, mas na hora de alterar a linha dá sempre erro, devido os metacaracteres do xml
EX:
sed -i '35s/.*/<string name="BPiZbadjt6lpsQKO4wB1aerzpjVIbdqyEdUSyFud+Ps=">2lua8AcvWqd1TQsoRNa6fw==:BvUD+KlFG6OhNRNxzixOZ3Ku+qKiUl3BnHe3XzVqsDw=:LIMjC/hlXoXxrbrKUhRX63f023c9lHmOZun9uTmuNIQ=</string>
/' arquivo1.xml


Se falarem que é pra botar uma barra de escape " \ " , eu já tentei e não funcionou :/
sempre retorna com um desses erros:

sed: -e expressão #1, caractere 206: Comando `s' inacabado (s/// - faltou delimitador)
sed: -e expressão #1, caractere 39: Opção desconhecida para o comando `s' (s///?)

Ah, e mais uma coisa: Como esses xml's estão criptografados, algumas strings dentro deles sempre mudam, então estou usando o grep para encontrar constantes nas linhas do outro arquivo.
tipo:
sed -i "35s/.*/$(grep 'string_constante' 'arquivo2.xml')/" arquivo1.xml 


daí fica dicil inserir a barra de escape, já que usando o grep eu não tenho o conteudo completo da linha pra inseri-la.

_______________________________________________
Ae Sidney, esse problema era previsto.....
Vamos lá.
O que esta causando erro, não são os META, e sim o DELIMITADOR do sed "/".
Vc tem duas opções:
1 - Escapa as "/" no arquivo "xml", assim:
sed 's/\//\\\//g' arquivo.xml 


02 - Muda o delimitador, tipo:
sed -i '10s#.*#qualquercoisa#' 


É isso!!!
É não esqueça .......

ATENÇÃO: VEJA o TóPICO => https://www.vivaolinux.com.br/topico/Comandos/Substituir-uma-linha-por-outra <= TEM CORREÇãO
Att.:.
Marcelo Oliver

3. Re: METACARACTERES NO SED DANDO DOR DE CABEÇA [RESOLVIDO]

Sidney Soares
ssidskull

(usa Manjaro Linux)

Enviado em 27/07/2016 - 12:47h

up


4. Re: METACARACTERES NO SED DANDO DOR DE CABEÇA [RESOLVIDO]

Sidney Soares
ssidskull

(usa Manjaro Linux)

Enviado em 27/07/2016 - 22:13h

msoliver escreveu:

ssidskull escreveu:

eu tenho um arquivo xml que preciso substituir algumas linhas, mas na hora de alterar a linha dá sempre erro, devido os metacaracteres do xml
EX:
sed -i '35s/.*/<string name="BPiZbadjt6lpsQKO4wB1aerzpjVIbdqyEdUSyFud+Ps=">2lua8AcvWqd1TQsoRNa6fw==:BvUD+KlFG6OhNRNxzixOZ3Ku+qKiUl3BnHe3XzVqsDw=:LIMjC/hlXoXxrbrKUhRX63f023c9lHmOZun9uTmuNIQ=</string>
/' arquivo1.xml


Se falarem que é pra botar uma barra de escape " \ " , eu já tentei e não funcionou :/
sempre retorna com um desses erros:

sed: -e expressão #1, caractere 206: Comando `s' inacabado (s/// - faltou delimitador)
sed: -e expressão #1, caractere 39: Opção desconhecida para o comando `s' (s///?)

Ah, e mais uma coisa: Como esses xml's estão criptografados, algumas strings dentro deles sempre mudam, então estou usando o grep para encontrar constantes nas linhas do outro arquivo.
tipo:
sed -i "35s/.*/$(grep 'string_constante' 'arquivo2.xml')/" arquivo1.xml 


daí fica dicil inserir a barra de escape, já que usando o grep eu não tenho o conteudo completo da linha pra inseri-la.

_______________________________________________
Ae Sidney, esse problema era previsto.....
Vamos lá.
O que esta causando erro, não são os META, e sim o DELIMITADOR do sed "/".
Vc tem duas opções:
1 - Escapa as "/" no arquivo "xml", assim:
sed 's/\//\\\//g' arquivo.xml 


02 - Muda o delimitador, tipo:
sed -i '10s#.*#qualquercoisa#' 


É isso!!!
É não esqueça .......

ATENÇÃO: VEJA o TóPICO => https://www.vivaolinux.com.br/topico/Comandos/Substituir-uma-linha-por-outra <= TEM CORREÇãO
Att.:.
Marcelo Oliver



Mais uma vez obrigado!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts