Comando sed engole caracteres de uma string

1. Comando sed engole caracteres de uma string

Luis Renato
tharivol

(usa Fedora)

Enviado em 18/01/2019 - 16:47h

boa tarde... tenho a seguinte situação...

tenho um vhost do nginx que preciso alterar, porém ao usar o sed ele "consome alguns caracteres...

linha original original: server_name; #subdominios

e outra com server_name www.teste.com.br">www.teste.com.br; #urlbase

no caso quero mudar somente a primeira linha


Caso eu utilize um sed com os seguintes parametros: sed -i "s/\;\ \#subdominios/\ ${S}\;\ \#subdominios/g" arquivo_ssl

o retorno é : server_name teste.com.br teste.com www.teste.com.br">www.teste.com.br www.teste.com #subdominios **perceba que o ; sumiu



porém se o comando sed for: sed -i "s/\;\ \#subdominios/\ ${S}\ \;#subdominios/g" arquivo_ssl

o retorno é: server_name teste.com.br ; #subdominios **Perceba que o ; apareceu na linha, porém tomou lugar de todo o resto da string que deveria ir antes dele.

meu retorno precisa ser: server_name teste.com.br teste.com www.teste.com.br">www.teste.com.br www.teste.com; #subdominios **Com todas as urls + ;

obrigado!




  


2. Re: Comando sed engole caracteres de uma string

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 18/01/2019 - 18:38h


tharivol escreveu:
meu retorno precisa ser: server_name teste.com.br teste.com www.teste.com.br">www.teste.com.br www.teste.com; #subdominios **Com todas as urls + ;
obrigado!


qual o conteúdo da variável 'S' ????

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

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

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




3. Re: Comando sed engole caracteres de uma string

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 18/01/2019 - 18:53h

V aí se ajuda , escapei o "ponto e virgula na variável" !!


mauricio@phantom ~ $ S=" teste.com.br teste.com www.teste.com.br">www.teste.com.br">www.teste.com.br">www.teste.com.br www.teste.com\">www.teste.com\; #subdominios"
mauricio@phantom ~ $ cat txt.txt
server_name; #subdominios
mauricio@phantom ~ $ sed -i "s,#subdominios,$S,g" txt.txt
mauricio@phantom ~ $ cat txt.txt
server_name; teste.com.br teste.com www.teste.com.br>www.teste.com.br">www.teste.com.br>www.teste.com.br www.teste.com; #subdominios
mauricio@phantom ~ $


NOTA: aqui no fórum aparece umas aspas antes do sinal de "maior", elas não existem no comando.


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

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

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




4. Re: Comando sed engole caracteres de uma string

Luis Renato
tharivol

(usa Fedora)

Enviado em 19/01/2019 - 01:03h

segunda vou tentar, o conteúdo da variável s eh essa mesma q vc colocou... eu pego ela de outro arquivo e tenho q adicionar naquele


5. Re: Comando sed engole caracteres de uma string

Luis Renato
tharivol

(usa Fedora)

Enviado em 21/01/2019 - 11:24h

como estou fazendo a reestruturação do codigo, não sou eu autor, então demora um tempo até ver tudo o que o programador fez


no caso sintetizei o que vi e temos uma parte do codigo aqui, esse sim eh a parte certa q teoricamente faz a troca
sendo ./test.sh arquivo

STRING=$(cat ${1} | grep 'server_name ')
STRING=$(echo "${STRING}" | sed -e 's/server\_name//g' | sed -e 's/\;//g')
echo "${STRING}"

echo ""

for S in $STRING; do
if [[ ${S} =~ "#subdominios" ]]; then
echo "${S}"
continue
fi

echo "Subdominio para reescrita: ${S}"
sed -i "s/\;\ \#subdominios/\ ${S}\;\ \#subdominios/g" arquivo

done



no caso a linha errada ainda eh a -> sed -i "s/\;\ \#subdominios/\ ${S}\;\ \#subdominios/g" porém agora pode ser saber os parametros que se chega na variavel S

no caso, estou tentando substituir por $S por $STRING, mas erros estao sendo gerados na forma que o sed está sendo escrito!


tentei subestituir o comando STRING=$(echo "${STRING}" | sed -e 's/server\_name//g' | sed -e 's/\;//g') de server\_name por #subdominios// para ele buscar somente pelo q tem na linha aonde tem #subdominio... mas ele ainda busca por tudo q tem server_name inclusive o que tem #urlbase


coloquei umas infos a mais no post original, ve la


6. Re: Comando sed engole caracteres de uma string

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 21/01/2019 - 12:23h

Faz o seguinte , acho que vai ficar mais fácil pra vc ... posta uma parte de test.sh, aí vc diz o que quer extrair... esse código que vc postou tá meio zuado e mal feito .




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

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

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




7. Re: Comando sed engole caracteres de uma string

Luis Renato
tharivol

(usa Fedora)

Enviado em 21/01/2019 - 14:32h

hahaha eu q o diga, o cara fez bem malfeito

Conteudo do arquivo.txt

server { # 301 REDIRECT - SEO
listen 80;
server_name dominio.com.br www.dominio.com dominio.com loja.dominio.com.br loja.dominio.com; #subdominios
rewrite / $scheme://www.dominio.com.br$request_uri permanent;
}
server {
listen 80;
server_name subdominio.outrodominio.com.br www.dominio.com.br; #urlbase
root /location/html/pasta;



Conteudo do arquivo adicionar.txt

server { # 301 REDIRECT - SEO
listen 80;
server_name ; #subdominios
rewrite / $scheme://www.dominio.com.br$request_uri permanent;
}
server {
listen 80;
server_name ; #urlbase
root /location/html/pasta;



Conteudo do arquivo test.sh

  
arquivo=arquivo.txt
STRING=$(cat arquivo.txt | grep 'server_name ')
STRING=$(echo "${STRING}" | sed -e 's/server\_name//g' | sed -e 's/\;//g')

for S in $STRING; do
if [[ ${S} =~ "#subdominios" ]]; then
continue
fi
if [[ ${S} =~ "#urlbase" ]]; then
continue
fi

if [[ ${S} =~ ".outrodominio.com.br" ]]; then
echo "Url outrodominio ${S}"
sed -i "s/domain/${arquivo}/g" $arquivo
sed -i "s/domain/${arquivo}/g" $arquivo
continue
fi

if [[ ${S} == ${BASEURL} ]]; then

echo "Base url é ${S}"
sed -i "s/\;\ \#urlbase/\ ${BASEURL}\;\ \#urlbase/g" ${arquivo}
sed -i "s/\;\ \#urlbase/\ ${BASEURL}\;\ \#urlbase/g" ${arquivo}

sed -i "s/\$scheme\:\/\/${arquivo}\.outrodominio\.com\.br/\$scheme\:\/\/${BASEURL}/g" ${arquivo
sed -i "s/\$scheme\:\/\/${arquivo}\.outrodominio\.com\.br/\$scheme\:\/\/${BASEURL}/g" ${arquivo
continue
fi

echo "Subdominio para reescrita: ${S}"
sed -i "s/\;\ \#subdominios/\ ${S}\;\ \#subdominios/g" # <- creio que aqui é o erro

done





intenção: adicionar o conteudo de "dominio.com.br www.dominio.com dominio.com loja.dominio.com.br loja.dominio.com" do arquivo.txt

na linha 'server_name ; #subdominios' do arquivo adicionar.txt



o codigo faz qse tudo oq promete, porém o erro está quando a linha porém ao adicionar a linha:

"dominio.com.br www.dominio.com dominio.com loja.dominio.com.br loja.dominio.com" ele engole o ; fazendo o adicionar.txt ficar errado


ficando:
server_name dominio.com.br www.dominio.com dominio.com loja.dominio.com.br loja.dominio.com #subdominios 
(sem ;)

onde deveria ficar:

server_name dominio.com.br www.dominio.com dominio.com loja.dominio.com.br loja.dominio.com; #subdominios 
<- certo!


8. Re: Comando sed engole caracteres de uma string

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 21/01/2019 - 16:07h


tharivol escreveu:

hahaha eu q o diga, o cara fez bem malfeito

Conteudo do arquivo.txt

server { # 301 REDIRECT - SEO
listen 80;
server_name dominio.com.br www.dominio.com dominio.com loja.dominio.com.br loja.dominio.com; #subdominios
rewrite / $scheme://www.dominio.com.br$request_uri permanent;
}
server {
listen 80;
server_name subdominio.outrodominio.com.br www.dominio.com.br; #urlbase
root /location/html/pasta;



Conteudo do arquivo adicionar.txt

server { # 301 REDIRECT - SEO
listen 80;
server_name ; #subdominios
rewrite / $scheme://www.dominio.com.br$request_uri permanent;
}
server {
listen 80;
server_name ; #urlbase
root /location/html/pasta;



Conteudo do arquivo test.sh

  
arquivo=arquivo.txt
STRING=$(cat arquivo.txt | grep 'server_name ')
STRING=$(echo "${STRING}" | sed -e 's/server\_name//g' | sed -e 's/\;//g')

for S in $STRING; do
if [[ ${S} =~ "#subdominios" ]]; then
continue
fi
if [[ ${S} =~ "#urlbase" ]]; then
continue
fi

if [[ ${S} =~ ".outrodominio.com.br" ]]; then
echo "Url outrodominio ${S}"
sed -i "s/domain/${arquivo}/g" $arquivo
sed -i "s/domain/${arquivo}/g" $arquivo
continue
fi

if [[ ${S} == ${BASEURL} ]]; then

echo "Base url é ${S}"
sed -i "s/\;\ \#urlbase/\ ${BASEURL}\;\ \#urlbase/g" ${arquivo}
sed -i "s/\;\ \#urlbase/\ ${BASEURL}\;\ \#urlbase/g" ${arquivo}

sed -i "s/\$scheme\:\/\/${arquivo}\.outrodominio\.com\.br/\$scheme\:\/\/${BASEURL}/g" ${arquivo
sed -i "s/\$scheme\:\/\/${arquivo}\.outrodominio\.com\.br/\$scheme\:\/\/${BASEURL}/g" ${arquivo
continue
fi

echo "Subdominio para reescrita: ${S}"
sed -i "s/\;\ \#subdominios/\ ${S}\;\ \#subdominios/g" # <- creio que aqui é o erro

done





intenção:
adicionar o conteudo de "dominio.com.br www.dominio.com dominio.com loja.dominio.com.br loja.dominio.com" do arquivo.txt
na linha 'server_name ; #subdominios' do arquivo adicionar.txt
o codigo faz qse tudo oq promete, porém o erro está quando a linha porém ao adicionar a linha:

"dominio.com.br www.dominio.com dominio.com loja.dominio.com.br loja.dominio.com" ele engole o ; fazendo o adicionar.txt ficar errado
ficando:
server_name dominio.com.br www.dominio.com dominio.com loja.dominio.com.br loja.dominio.com #subdominios 
(sem ;)
onde deveria ficar:
server_name dominio.com.br www.dominio.com dominio.com loja.dominio.com.br loja.dominio.com; #subdominios 
<- certo!


Boa tarde.
Veja se é isso que deseja:
STRING=$(grep '#subdominios$' arquivo.txt)
sed "s/.*#subdominios$/ ${STRING}/" adicionar.txt

Att.:
Marcelo Oliver


9. Re: Comando sed engole caracteres de uma string

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 21/01/2019 - 16:09h


confuso demais esse script, ele é assim mesmo ou vc fez ele assim para postar aqui ... que diabos é "continue" ... que variável é essa BASEURL ???

1º STRING está declarada 2 vezes ... não tem motivo, ela funciona desa forma
STRING=$(grep server_name $arquivo| sed -e 's/server\_name//g' | sed -e 's/\;//g') 


enfim .. v aí
arquivo=arquivo.txt
STRING=$(grep server_name $arquivo| sed -e 's/server\_name//g' | sed -e 's/\;//g')

for S in $STRING; do
if [[ ${S} =~ "#subdominios" ]]; then
continue
fi
if [[ ${S} =~ "#urlbase" ]]; then
continue
fi

if [[ ${S} =~ ".outrodominio.com.br" ]]; then
echo "Url outrodominio ${S}"
sed -i "s/domain/${arquivo}/g" $arquivo
sed -i "s/domain/${arquivo}/g" $arquivo
continue
fi

if [[ ${S} == ${BASEURL} ]]; then

echo "Base url é ${S}"
sed -i "s/\;\ \#urlbase/\ ${BASEURL}\;\ \#urlbase/g" ${arquivo}
sed -i "s/\;\ \#urlbase/\ ${BASEURL}\;\ \#urlbase/g" ${arquivo}

sed -i "s/\$scheme\:\/\/${arquivo}\.outrodominio\.com\.br/\$scheme\:\/\/${BASEURL}/g" ${arquivo}
sed -i "s/\$scheme\:\/\/${arquivo}\.outrodominio\.com\.br/\$scheme\:\/\/${BASEURL}/g" ${arquivo}
continue
fi

echo "Subdominio para reescrita: ${S}"
sed -i "s/\;\ \#subdominios/\ ${S}\;\ \#subdominios/g" adicionar.txt

done





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

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

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




10. Re: Comando sed engole caracteres de uma string

Luis Renato
tharivol

(usa Fedora)

Enviado em 21/01/2019 - 17:03h

Mauriciodez escreveu:


confuso demais esse script, ele é assim mesmo ou vc fez ele assim para postar aqui ... que diabos é "continue" ... que variável é essa BASEURL ???

1º STRING está declarada 2 vezes ... não tem motivo, ela funciona desa forma
STRING=$(grep server_name $arquivo| sed -e 's/server\_name//g' | sed -e 's/\;//g') 


enfim .. v aí
arquivo=arquivo.txt
STRING=$(grep server_name $arquivo| sed -e 's/server\_name//g' | sed -e 's/\;//g')

for S in $STRING; do
if [[ ${S} =~ "#subdominios" ]]; then
continue
fi
if [[ ${S} =~ "#urlbase" ]]; then
continue
fi

if [[ ${S} =~ ".outrodominio.com.br" ]]; then
echo "Url outrodominio ${S}"
sed -i "s/domain/${arquivo}/g" $arquivo
sed -i "s/domain/${arquivo}/g" $arquivo
continue
fi

if [[ ${S} == ${BASEURL} ]]; then

echo "Base url é ${S}"
sed -i "s/\;\ \#urlbase/\ ${BASEURL}\;\ \#urlbase/g" ${arquivo}
sed -i "s/\;\ \#urlbase/\ ${BASEURL}\;\ \#urlbase/g" ${arquivo}

sed -i "s/\$scheme\:\/\/${arquivo}\.outrodominio\.com\.br/\$scheme\:\/\/${BASEURL}/g" ${arquivo}
sed -i "s/\$scheme\:\/\/${arquivo}\.outrodominio\.com\.br/\$scheme\:\/\/${BASEURL}/g" ${arquivo}
continue
fi

echo "Subdominio para reescrita: ${S}"
sed -i "s/\;\ \#subdominios/\ ${S}\;\ \#subdominios/g" adicionar.txt

done





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

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

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






Pra vc ver como estou sofrendo revisando esse código que não eh meu rsrs

mas vou testar as sugestões


11. Re: Comando sed engole caracteres de uma string

Luis Renato
tharivol

(usa Fedora)

Enviado em 22/01/2019 - 17:37h

Mauriciodez escreveu:


confuso demais esse script, ele é assim mesmo ou vc fez ele assim para postar aqui ... que diabos é "continue" ... que variável é essa BASEURL ???

1º STRING está declarada 2 vezes ... não tem motivo, ela funciona desa forma
STRING=$(grep server_name $arquivo| sed -e 's/server\_name//g' | sed -e 's/\;//g') 


enfim .. v aí
arquivo=arquivo.txt
STRING=$(grep server_name $arquivo| sed -e 's/server\_name//g' | sed -e 's/\;//g')

for S in $STRING; do
if [[ ${S} =~ "#subdominios" ]]; then
continue
fi
if [[ ${S} =~ "#urlbase" ]]; then
continue
fi

if [[ ${S} =~ ".outrodominio.com.br" ]]; then
echo "Url outrodominio ${S}"
sed -i "s/domain/${arquivo}/g" $arquivo
sed -i "s/domain/${arquivo}/g" $arquivo
continue
fi

if [[ ${S} == ${BASEURL} ]]; then

echo "Base url é ${S}"
sed -i "s/\;\ \#urlbase/\ ${BASEURL}\;\ \#urlbase/g" ${arquivo}
sed -i "s/\;\ \#urlbase/\ ${BASEURL}\;\ \#urlbase/g" ${arquivo}

sed -i "s/\$scheme\:\/\/${arquivo}\.outrodominio\.com\.br/\$scheme\:\/\/${BASEURL}/g" ${arquivo}
sed -i "s/\$scheme\:\/\/${arquivo}\.outrodominio\.com\.br/\$scheme\:\/\/${BASEURL}/g" ${arquivo}
continue
fi

echo "Subdominio para reescrita: ${S}"
sed -i "s/\;\ \#subdominios/\ ${S}\;\ \#subdominios/g" adicionar.txt

done





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

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

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






AEW... deu certo... porém tive que fazer uma unica modificação

STRING=$(grep server_name $arquivo| sed -e 's/server\_name//g' | sed -e 's/\;//g') 


por

STRING=$(grep server_name $arquivo| sed -e 's/server\_name//g') 


finalmente... deu certo!!!

obrigado! esse codigo tava mt maluco... qse fiz ele do zero... ia demorar +, mas ia ficar mais claro!




12. Re: Comando sed engole caracteres de uma string

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 22/01/2019 - 17:43h

Bom que resolveu ... precisando é só dar o grito !!

abçs

NOTA: Não deixe de finalizar seu tópico corretamente !!! >> https://www.vivaolinux.com.br/dica/Como-marcar-um-topico-como-RESOLVIDO-e-assinalar-MELHOR-RESPOSTA/


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

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

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





  



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts