Sed -i para remover apenas da linha 20 pra baixo, apagar a partir da ocorrencia de uma palavra mais

1. Sed -i para remover apenas da linha 20 pra baixo, apagar a partir da ocorrencia de uma palavra mais

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 15/07/2021 - 01:21h

Boa noite, antes de mais nada quro agradecer desde ja a comunidade.
Eu uso esse comando pra apagar no arquivo de conf, só que eu queria impedir que ele apagasse o arquivo antes das 20 primeiras linhas, que apagasse apenas a linha da ocorrencia da palavra /usuario/ mais 9 pra baixo sem apagar nada das 20 primeiras linhas mesmo que encontre a ocorrencia da palavra "/usuario/", segue meu comando atual:

sed -i /usuario/,+9d /etc/apache2/http.conf

Obrigado!


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 15/07/2021 - 03:40h

jorgessn escreveu:

Boa noite, antes de mais nada quro agradecer desde ja a comunidade.
Eu uso esse comando pra apagar no arquivo de conf, só que eu queria impedir que ele apagasse o arquivo antes das 20 primeiras linhas, que apagasse apenas a linha da ocorrência da palavra /usuario/ mais 9 pra baixo sem apagar nada das 20 primeiras linhas mesmo que encontre a ocorrência da palavra "/usuario/", segue meu comando atual:

sed -i /usuario/,+9d /etc/apache2/http.conf

Obrigado!

Pequena contribuição, devido ao horário.....
O comando abaixo mostra o nº da linha das ocorrências de "usuario", nas linhas acima de nº20.
awk '/usuario/ {if(NR>20)printf "%s\n" ,NR}' texto. 


Editado em 15-07-2021 17:13:00
Comando completo:
awk 'NR>20 && /usuario/{c++;if(c=1) cmd="sed -i \""NR",+9d;\" texto.txt";system(cmd);exit}' texto.txt 

Casa as ocorrências de "usuario", nas linhas maiores que 20 e inicia o contador c++,
Se c=1, monta o comando sed, executa e sai.
______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________



3. Resolvido

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 16/07/2021 - 00:58h


Diacho mano, ô comando complicado da peste, rs. Mas resolveu! Muito grato Oliver, sempre voce me ajudando, das antigas já. Era isso mesmo, um comando para encontrar uma palavra a partir da linha 20 e pagar 9 linhas pra baixo. Perfeito! Obrigado mais uma vez !


4. Sed -i para remover apenas da linha 20 pra baixo, apagar a partir da primeiro ocorrencia depois da l

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 16/07/2021 - 01:18h


Oliver, será que voce saberia colocar esse comando no shell_exec?

eu tentei assim mas nao funcionou!
Eu sei que o sed da problema com barras e por isso coloquei a aspas antes e depois das barras mas nao foi:

shell_exec(awk 'NR>20 && /userDelete/{c++;if(c=1) cmd="sed -i '\'""NR",+9d;'\'" '/'etc'/'apache2'/'sites-available'/'nbv2.conf";system(cmd);exit}' /etc/apache2/sites-available/nbv2.conf);


5. Re: Sed -i para remover apenas da linha 20 pra baixo, apagar a partir da ocorrencia de uma palavra mais

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 17/07/2021 - 19:29h


[quote]jorgessn escreveu:


Oliver, será que voce saberia colocar esse comando no shell_exec?
Veja:
https://www.php.net/manual/pt_BR/function.shell-exec.php
https://www.php.net/manual/pt_BR/function.escapeshellcmd.php
---------------------------------------------------------------------------------

eu tentei assim mas nao funcionou!
Eu sei que o sed da problema com barras e por isso coloquei a aspas antes e depois das barras mas nao foi:
Nesse caso não se aplica,
as barras estão no "arquivo alvo", e não internamente no comando sed, e ainda assim, esse SED não utiliza SEPARADORES.....
awk 'NR>20 && /usuario/{c++;if(c=1) system("sed \""NR",+9d;\" /media/adminq/Backup/Diversos_00/texto.txt");exit}' /media/adminq/Backup/Diversos_00/texto.txt 

-------------------------------------------------------------------------------------------------------------------------------
Comando melhorado:
awk 'NR>20 && /usuario/{c++;if(c=1) system("sed \""NR",+9d;\" texto.txt");exit}' texto.txt 

Note que NÃO declarei o "cmd", como fiz anteriormente...
-------------------------------------------------------------------------------------------------------------------------------
As aspas duplas na função system(),
envolvem o que não é "variável" no awk.

-------------------------------------------------------------------------------------------------------------------------------



______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________




6. Comando funcionou,porem, nao funciona no shell_exec no php

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 23/07/2021 - 23:28h

Boa noite Oliver e comunidade Linux, desculpe a demora, minha placa mae queimou pela terceira vez e só vim a pegar hoje da garantia. O comando funciona no bash, porém, ao jogar no shell_exec no php não vai. O comando que funcionou pra mim foi esse que você me passou Oliver:
awk NR>20 && /palavra/{c++;if(c=1) cmd="sed -i \""NR",+d;\" /etc/apache2/sites-available/site.conf";system(cmd);exit} /etc/apache2/sites-available/site.conf

Ao utilizar no shell_exec ele não funciona e nem abre a pagina, aparece erro HTTP 500 Erro Interno do Servidor. ficou assim o exec:
shell_exec("sudo -u root awk NR>20 && /palavra/{c++;if(c=1) cmd="sed -i \""NR",+d;\" /etc/apache2/sites-available/site.conf";system(cmd);exit} /etc/apache2/sites-available/site.conf");

Va desculpado a ignorância e agradeço muito a ajuda Oliver!



7. Comando funciona no bash mas nao no shell_exec do php

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 23/07/2021 - 23:56h

Oliver, desculpe a ignorância, o comando funciona só no bash mas no php não da mais o erro 500 com essas barras que coloquei, mas não funciona de qualquer jeito.
No shell_exec ficou assim:

shell_exec("sudo -u root awk 'NR>43 && '/'$userDelete'/'{c++;if(c=1) cmd='sed -i '\'''NR',+11d;'\'' '/'etc'/'samba'/'smb.conf';system(cmd);exit}' '/'etc'/'samba'/'smb.conf");

Sera que sabe o que fiz de errado?
Obrigado mais uma vez Marcelo Oliver


8. Sed -i para remover apenas da linha 20 pra baixo, apagar a partir da ocorrencia de uma palavra

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 24/07/2021 - 13:40h

Oliver, desculpe a ignorância, nao entendo muito de shell e menos de expressão regular, mas pode dar uma olhada de como deixei o exec, segue:

shell_exec("sudo -u root awk 'NR > 61 && /$userDelete/{c++;if(c=1) cmd=sed -i \ NR,+11d;\ /etc/samba/smb.conf;system(cmd);exit}' /etc/samba/smb.conf");

As aspas duplas eu tirei pois estão dentro das do shell_exec(""); manti só as simples pra determinar os parametros do awk com o sed. Mais uma vez peço desculpa a ignorancia e agradeço qualquer ajuda!


9. Re: Sed -i para remover apenas da linha 20 pra baixo, apagar a partir da ocorrencia de uma palavra mais

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 25/07/2021 - 19:09h


jorgessn escreveu:

Oliver, desculpe a ignorância, nao entendo muito de shell e menos de expressão regular, mas pode dar uma olhada de como deixei o exec, segue:

shell_exec("sudo -u root awk 'NR > 61 && /$userDelete/{c++;if(c=1) cmd=sed -i \ NR,+11d;\ /etc/samba/smb.conf;system(cmd);exit}' /etc/samba/smb.conf");

As aspas duplas eu tirei pois estão dentro das do shell_exec(""); manti só as simples pra determinar os parametros do awk com o sed. Mais uma vez peço desculpa a ignorancia e agradeço qualquer ajuda!

Boa noite Jorge.

Não tenho como testar, precisaria instalar um Web server para isso.....
Veja o tópico:
https://www.vivaolinux.com.br/topico/PHP/shell-exec


______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________



10. Sed -i para remover apenas da linha 20 pra baixo, apagar a partir da ocorrencia de uma palavra mais

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 25/07/2021 - 21:31h

Boa noite Oliver, muito obrigado, ja me ajudou muito. Gratidao amigo!



11. Sed -i para remover apenas da linha 20 pra baixo, apagar a partir da ocorrencia de uma palavra mais

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 27/07/2021 - 18:54h


Oliver, boa noite, desculpe te importunar, mas só você meu amigo pra me ajudar...
Olhe o comando:

shell_exec("sudo -u root sed -i '/'$userDelete'/',+d '/'etc'/'apache2'/'http.conf");

ele só funciona com as aspas, agora se ele funciona, porque este nao funciona:

shell_exec("sudo -u root awk 'NR>20 && /usuario/{c++;if(c=1) cmd="sed -i \""NR",+9d;\" /etc/apache2/http.conf";system(cmd);exit}' /etc/apache2/http.conf");

?
Eu devo colocar as aspas nas barras também? E as barras que são invertidas eu coloco a aspas simples também?


12. Re: Sed -i para remover apenas da linha 20 pra baixo, apagar a partir da ocorrencia de uma palavra mais

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 27/07/2021 - 23:26h


Oliver, tive progresso, agora o codigo funciona porém não respeita a condiçao NR>17 e apaga o conteudo antes da linha 20

shell_exec("sudo -u root awk 'NR > 17 && /$userDelete/{c++;if(c=1) cmd='sed -i \NR,+9d;\ texto.txt;system(cmd);exit} texto.txt");




01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts