Editar texto com palavra chave!!

Fórum para discussão sobre Linux para processadores ARM

Moderadores: 51, guest2003, Renie, gpenga

Editar texto com palavra chave!!

Mensagempor fabim » 12 Jul 2021 11:25

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!
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Re: Editar texto com palavra chave!!

Mensagempor sync » 12 Jul 2021 19:27

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
sync
Byte
 
Mensagens: 195
Registrado em: 04 Mai 2020 16:11

Re: Editar texto com palavra chave!!

Mensagempor fabim » 13 Jul 2021 13:01

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!
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Re: Editar texto com palavra chave!!

Mensagempor sync » 13 Jul 2021 17:30

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"
sync
Byte
 
Mensagens: 195
Registrado em: 04 Mai 2020 16:11

Re: Editar texto com palavra chave!!

Mensagempor fabim » 14 Jul 2021 10:24

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;;
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Re: Editar texto com palavra chave!!

Mensagempor sync » 14 Jul 2021 15:49

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"
Você não está autorizado a ver ou baixar esse anexo.
sync
Byte
 
Mensagens: 195
Registrado em: 04 Mai 2020 16:11


Voltar para Linux / uCLinux ( ARM ) / UNIX

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x