Página 1 de 1

Editar texto com palavra chave!!

MensagemEnviado: 12 Jul 2021 11:25
por fabim
Pessoal, passei o final de semana procurando algo sobre como substituir texto após um padrão, e não encontrei nadinha!

Todos explicam como adicionar no final, substituir o propio padrão etc.

Tenho um arquivo, e nesse, tenho dois padrões:


Código: Selecionar todos
network={
        ssid="name"
        psk="key_pass"
}

O que eu preciso fazer, não sei se é possível, seria substituir o que está após "=".
Se eu conseguir descobrir a linha, logo, eu posso substitui-la pelo termo " ssid="+" nome da resde", o mesmo para PSK.

Mas meu nível atual de conhecimento em regex, me faz estar completamente perdido!

Algum linuxeiro que possa me ajudar com essa questão?

Muito obrigado!

Re: Editar texto com palavra chave!!

MensagemEnviado: 12 Jul 2021 19:27
por sync
Colega
Não sei se entendi o que o amigo precisa mas eu fiz assim:

criei um arquivo fab.txt contendo as linhas acima e o editei com o sed trocando "name" por "fabimnetwork".
A saída vai para stdout e é mostrada abaixo da linha de comando

Código: Selecionar todos
$ sed s/ssid=\".*\"/ssid=\"fabimnetwork\"/ fab.txt
network={
        ssid="fabimnetwork"
        psk="key_pass"
}


o colega pode direciona-la para um arquivo temporário, não conheço o fluxo do seu script de configuração

Código: Selecionar todos
sed s/ssid=\".*\"/ssid=\"fabimnetwork\"/ fab.txt >/tmp/fabtmp.txt


se o colega está editando os arquivos um a um com o vi, a busca e substituição é semelhante
Código: Selecionar todos
:g/ssid=\".*\"/s//ssid=\"fabimnetwork\"/


Os colegas linuxeiros do forum, feras de regexp, devem ter soluções mais elegantes

Re: Editar texto com palavra chave!!

MensagemEnviado: 13 Jul 2021 13:01
por fabim
Mister sync, linuxeiro, da silva sauro!

Muito obrigado!
Funcionou lindamente!

Me corrija, por favor.

sed s/ssid=\".*\"/ssid=\"fabimnetwork\"/ fab.txt

Procure expressão "ssid=", quando encontrar, subistua por "ssid="+ segunda expressão = fabimnetwork.

Eu agora, fiquei um pouco intrigado, tentando entender algumas coisas, ocultas.

Pude ver, que você na expressão do sed, não colocou os 8 espaços no segundo "ssid=" para haver a substituição.
Também, fiz alguns testes colocando palavras após expressão ssid=, de vários tamanhos, 1 char até 50 chars.
Ele, se pude entender, substitui a linha toda, porém começando pela expressão encontrada?
Isso é exatamente o que preciso, pois o nome pode, por vezes, ter alguns chars, ou uma duzia...

Poderia me explicar, ou indicar uma fonte de estudo para eu entender melhor essa expressão que me salvou?


Muito obrigado mister senhor!

Re: Editar texto com palavra chave!!

MensagemEnviado: 13 Jul 2021 17:30
por sync
Caro Fabim,

A busca é por ssid=\".*\" , isto é, ssid= seguido de um ou mais caracteres entre aspas
Se a busca tiver sucesso, é feita a substituição por ssid="fabimnetwork"
Removendo a proteção do \ ficaria assim:
Busque ssid=".*" e troque por ssid="fabimnetwork"

Re: Editar texto com palavra chave!!

MensagemEnviado: 14 Jul 2021 10:24
por fabim
Obrigado Sync.

Como disse anteriormente, pude observar que ele altera não somente a expressão, ele troca a linha toda!
Ficou muito boa a solução, a única coisa é implementar isso no subprocess do python, que deu dor de cabeça! Rsrsrs

Muitíssimo obrigado novamente!


Fabim;;

Re: Editar texto com palavra chave!!

MensagemEnviado: 14 Jul 2021 15:49
por sync
Caro
Você pode definir mais de uma ação para o sed realizar, use -e para definir cada uma delas nesse caso, um livro muito bom é o sed & awk que você baixa de graça da biblioteca libgen.is.

O sed é muito prático para usar com bash, se o seu script é em python eu creio que você pode fazer diretamente nele a substituição:

Código: Selecionar todos
linha='ssid="name"'
linhamodificada=linha.replace("name","fabimnetwork")
print(linhamodificada)
ssid="fabimnetwork"