Sed - Comandos de Substituição [RESOLVIDO]

1. Sed - Comandos de Substituição [RESOLVIDO]

Mestre De Ubuntu
MestreDUbuntu

(usa Ubuntu)

Enviado em 03/05/2020 - 13:38h

Olá, tudo bem?

Estou precisando de um auxilio referente a Shell Script, comecei a estudar recentemente essa ferramenta, e já estou aplicando no meu servidor.

Estou criando um script que irá realizar a instalação de um CMS em um servidor de hospedagem compartilhada, por se tratar de muitos passos, gostaria de automatizar, em favor da otimização de tempo.

Eu encontrei duas dificuldades, e espero que possam me ajudar.

1 - Eu preciso editar a linha número 954 de um arquivo de texto

Nome do arquivo: php.ini

Realizei alguns testes com o sed e utilizando o comando "s" para subistituir, mas por conta da própria linha contem "/" (barra) eu creio que anulou o comando, tentei escapar as barras com barras invertida "\", porém também não tive sucesso.

Preciso que a linha original seja substituida por: session.save_path = "/home/userftp/tmp"

"UserFTP" - Se refere a usuário FTP, então pode ser que tenha números também. Se tiver alguma flag genérica que aceite os dois.

Linha original: session.save_path = "/var/lib/php/session"

Tentei trocar as palavrás também, porém ele não altera depois de "/lib/"

Também testei excluir a linha 954 e printar o conteúdo completo, mas creio que a / atrapalhou novamente.

2 - No meio desse script eu preciso criar um vi (arquivo de texto) com esse conteúdo:

"AddHandler php72-script .php
suPHP_ConfigPath /home/LOGINFTP/

# BEGIN WordPress
# As diretrizes (linhas) entre `BEGIN WordPress` e` END WordPress` são
# geradas dinamicamente e só devem ser modificadas através de filtros do WordPress.
# Quaisquer alterações nas diretivas entre esses marcadores serão sobrescritas.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /site/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /site/index.php [L]
</IfModule>

# END WordPress"

OBS: Todo conteúdo dentro das aspas.

O nome do arquivo gerado tem que ser: .htaccess

Estou num numa Plataforma: CentOS 5.11 - 64 bits


#!/bin/bash

# Limpa a tela

clear

echo " ================================================================== "
echo " A Robotagora está instalando o WordPress para você. "
echo " ================================================================== "
# Doownload wordpress
curl -SO https://br.wordpress.org/latest-pt_BR.zip
# Descompacte wordpress
unzip latest-pt_BR.zip
# Acessar diretório para wordpress
cd wordpress
# Mover tudo do diretório atual para o diretório anterior
mv * ..
# Voltar ao diretório raiz
cd ..
# Ajustar arquivo de conexão com o banco de dados com sed - find and replace
sed -i 's/nome_do_banco_de_dados_aqui/namebase/' wp-config-sample.php
sed -i 's/nome_de_usuario_aqui/userbase/' wp-config-sample.php
sed -i 's/senha_aqui/pwdbase/' wp-config-sample.php
sed -i 's/localhost/hostbase/' wp-config-sample.php
# Voltar ao diretório raiz
cd
# Renomeando php.ini
mv php.ini php.ini-old
# Copiando php.ini do Servidor
cp /etc/php.ini .
# Ajustando as diretivas do php.ini com sed - find and replace
sed -i 's/max_execution_time = 30/max_execution_time = 90/' php.ini
sed -i 's/max_input_time = 60/max_input_time = 90/' php.ini
sed -i 's/memory_limit = 32M/memory_limit = 512M/' php.ini
sed -i 's/post_max_size = 8M/post_max_size = 50M/' php.ini
sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 50M/' php.ini
# Ajustando diretivas do session com sed - find and replace
sed -i '954d' php.ini
sed -i '/var/ s/var/home/' php.ini
sed -i '/lib/ s/lib/UserFTP/' php.ini
sed -i '/php/ s/php/^$' php.ini
sed -i '/session/ s/session/tmp/954' php.ini
sed -i '/var/ s/var/home/' php.ini
# Removendo arquivos desnecessários
echo " Realizando a Limpando ... "
# Remover diretório vazio "wordpress"
rmdir public_html/wordpress
# Remover arquivo zip
rm public_html/latest-pt_BR.zip
# Remover script bash
rm wp.sh
echo " ========================= "
echo "A instalação está concluída. "
echo " ========================= "



  


2. MELHOR RESPOSTA

Mauricio Ferrari
maurixnovatrento

(usa Slackware)

Enviado em 03/05/2020 - 16:53h

sed -i -e "s/session.save_path/#session.save_path#/g" php.ini
echo 'session.save_path = "/home/userftp/tmp' | tee -a php.ini

Aqui o session.save_path = "/home/userftp/tmp vai ser atribuido no final da linha.

Se isso atrapalhar terá que criar uma instrução para inseri-lo na linha desejada. Vê se vai:
sed -i '296i session.save_path = "/home/userftp/tmp' php.ini

296 é o número da linha.

echo 'AddHandler php72-script .php
suPHP_ConfigPath /home/LOGINFTP/

# BEGIN WordPress
# As diretrizes (linhas) entre `BEGIN WordPress` e` END WordPress` são
# geradas dinamicamente e só devem ser modificadas através de filtros do WordPress.
# Quaisquer alterações nas diretivas entre esses marcadores serão sobrescritas.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /site/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /site/index.php [L]
</IfModule>

# END WordPress' | tee -a php.ini

só dai vê o local e o nome do arquivo certinho.

___________________________________
Conhecimento não se Leva para o Túmulo.

3. Re: Sed - Comandos de Substituição [RESOLVIDO]

Mestre De Ubuntu
MestreDUbuntu

(usa Ubuntu)

Enviado em 03/05/2020 - 18:13h

mauricio123 escreveu:

sed -i -e "s/session.save_path/#session.save_path#/g" php.ini
echo 'session.save_path = "/home/userftp/tmp' | tee -a php.ini

Aqui o session.save_path = "/home/userftp/tmp vai ser atribuido no final da linha.

Se isso atrapalhar terá que criar uma instrução para inseri-lo na linha desejada. Vê se vai:
sed -i '296i session.save_path = "/home/userftp/tmp' php.ini

296 é o número da linha.

echo 'AddHandler php72-script .php
suPHP_ConfigPath /home/LOGINFTP/

# BEGIN WordPress
# As diretrizes (linhas) entre `BEGIN WordPress` e` END WordPress` são
# geradas dinamicamente e só devem ser modificadas através de filtros do WordPress.
# Quaisquer alterações nas diretivas entre esses marcadores serão sobrescritas.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /site/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /site/index.php [L]
</IfModule>

# END WordPress' | tee -a php.ini

só dai vê o local e o nome do arquivo certinho.

___________________________________
Conhecimento não se Leva para o Túmulo.



Olá Mauricio, tudo bem?

Primeiro quero te agradecer pela grande ajuda que me deu.

Este comando: sed -i '296i session.save_path = "/home/userftp/tmp' php.ini

Funcionou, porém ele não substituiu a linha em questão, então adicionei uma linha anterior que remove a desejada, e depois esse comando printa na linha setada no comando.

E assim já me serve muito bem.

Referente ao comando echo, não me recordava que poderia ser utilizado em | com o tee, mas foi de grande ajuda também.

Agradeço de verdade.





4. Re: Sed - Comandos de Substituição [RESOLVIDO]

Mauricio Ferrari
maurixnovatrento

(usa Slackware)

Enviado em 03/05/2020 - 18:18h

Coloca o tópico como resolvido então. só para fechar mesmo.

__________________________________
Conhecimento não se Leva para o Túmulo.


5. Re: Sed - Comandos de Substituição

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 03/05/2020 - 18:19h

Quanto a primeira questão, use o sed com o número da linha e a opção "c" (substituir linha):
sed -i '954 c session.save_path = "/home/userftp/tmp"' arquivo 



6. Re: Sed - Comandos de Substituição [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 03/05/2020 - 19:06h


MestreDUbuntu escreveu:

Olá, tudo bem?

Estou precisando de um auxilio referente a Shell Script, comecei a estudar recentemente essa ferramenta, e já estou aplicando no meu servidor.

Estou criando um script que irá realizar a instalação de um CMS em um servidor de hospedagem compartilhada, por se tratar de muitos passos, gostaria de automatizar, em favor da otimização de tempo.

Eu encontrei duas dificuldades, e espero que possam me ajudar.

1 - Eu preciso editar a linha número 954 de um arquivo de texto

Nome do arquivo: php.ini

Realizei alguns testes com o sed e utilizando o comando "s" para subistituir, mas por conta da própria linha contem "/" (barra) eu creio que anulou o comando, tentei escapar as barras com barras invertida "\", porém também não tive sucesso.

Preciso que a linha original seja substituida por: session.save_path = "/home/userftp/tmp"

"UserFTP" - Se refere a usuário FTP, então pode ser que tenha números também. Se tiver alguma flag genérica que aceite os dois.

Linha original: session.save_path = "/var/lib/php/session"

Tentei trocar as palavras também, porém ele não altera depois de "/lib/"

Também testei excluir a linha 954 e printar o conteúdo completo, mas creio que a / atrapalhou novamente.

2 - No meio desse script eu preciso criar um vi (arquivo de texto) com esse conteúdo:

"AddHandler php72-script .php
suPHP_ConfigPath /home/LOGINFTP/

# BEGIN WordPress
# As diretrizes (linhas) entre `BEGIN WordPress` e` END WordPress` são
# geradas dinamicamente e só devem ser modificadas através de filtros do WordPress.
# Quaisquer alterações nas diretivas entre esses marcadores serão sobrescritas.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /site/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /site/index.php [L]
</IfModule>

# END WordPress"

OBS: Todo conteúdo dentro das aspas.

O nome do arquivo gerado tem que ser: .htaccess

Estou numa Plataforma: CentOS 5.11 - 64 bits


#!/bin/bash

# Limpa a tela

clear

echo " ================================================================== "
echo " A Robotagora está instalando o WordPress para você. "
echo " ================================================================== "
# Doownload wordpress
curl -SO https://br.wordpress.org/latest-pt_BR.zip
# Descompacte wordpress
unzip latest-pt_BR.zip
# Acessar diretório para wordpress
cd wordpress
# Mover tudo do diretório atual para o diretório anterior
mv * ..
# Voltar ao diretório raiz
cd ..
# Ajustar arquivo de conexão com o banco de dados com sed - find and replace
sed -i 's/nome_do_banco_de_dados_aqui/namebase/' wp-config-sample.php
sed -i 's/nome_de_usuario_aqui/userbase/' wp-config-sample.php
sed -i 's/senha_aqui/pwdbase/' wp-config-sample.php
sed -i 's/localhost/hostbase/' wp-config-sample.php
# Voltar ao diretório raiz
cd
# Renomeando php.ini
mv php.ini php.ini-old
# Copiando php.ini do Servidor
cp /etc/php.ini .
# Ajustando as diretivas do php.ini com sed - find and replace
sed -i 's/max_execution_time = 30/max_execution_time = 90/' php.ini
sed -i 's/max_input_time = 60/max_input_time = 90/' php.ini
sed -i 's/memory_limit = 32M/memory_limit = 512M/' php.ini
sed -i 's/post_max_size = 8M/post_max_size = 50M/' php.ini
sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 50M/' php.ini
# Ajustando diretivas do session com sed - find and replace
sed -i '954d' php.ini
sed -i '/var/ s/var/home/' php.ini
sed -i '/lib/ s/lib/UserFTP/' php.ini
sed -i '/php/ s/php/^$' php.ini # Qual a intenção?
sed -i '/session/ s/session/tmp/954' php.ini
sed -i '/var/ s/var/home/' php.ini #Repetido
# Removendo arquivos desnecessários
echo " Realizando a Limpando ... "
# Remover diretório vazio "wordpress"
rmdir public_html/wordpress
# Remover arquivo zip
rm public_html/latest-pt_BR.zip
# Remover script bash
rm wp.sh
echo " ========================= "
echo "A instalação está concluída. "
echo " ========================= "


Boa noite Mestre.
Para contornar o problema das "/",
No comando sed, utilize outro "delimitador",
Exemplo:
echo 'session.save_path = "/var/lib/php/session"'|sed 's|".*"|"/home/userftp/tmp"|'
Observe que usei o "pipe" como delimitador.
Ou, escape as "/"
sed '/^session.save_path/s/\".*\"/\"\/home\/userftp\/tmp\"/' arquivo #Troca o que está entre " , por.....

Quanto ao "UserFtp", utilize uma variável....

Para a criação do arquivo .htaccess,
Sugiro colocar o texto em um arquivo.txt, e,
cat arquivo.txt > .htaccess
MELHORANDO O COMANDO:
Altere
sed -i 's/max_execution_time = 30/max_execution_time = 90/' php.ini
Para:
sed -i '/^max_execution_time/s/[0-9]\+/90/' php.ini #É mais rápido e eficiente

______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts