Se você possui um arquivo de texto e deseja pesquisar e substituir uma parte de um padrão correspondente, como faria com perl one-liners, sed ou python?
Por exemplo:
"653433,78"
combinar com [0-9]{6},[0-9]{2}
.
Mude ,
para .
.
Se você possui um arquivo de texto e deseja pesquisar e substituir uma parte de um padrão correspondente, como faria com perl one-liners, sed ou python?
Por exemplo:
"653433,78"
combinar com [0-9]{6},[0-9]{2}
.
Mude ,
para .
.
Respostas:
Você pode usar subgrupos numerados. ou seja:
Encontrar:
([0-9]{6}),([0-9]{2})
Substituir:
\1.\2
Exemplo em Python:
import re
inp = '653433,78'
out = re.sub(r'([0-9]{6}),([0-9]{2})', r'\1.\2', inp)
print out
Isso lhe daria:
>>>'653433.78'
Você pode capturar a peça correspondente ao redor do padrão que deseja substituir e, em seguida, reutilizá-la na instrução de substituição.
cat yourfile | perl -p -e "s/([0-9]{6}),([0-9]{2})/\\1.\\2/g"
Uma solução mais complexa com lookahead e lookbacks também pode ser usada (mas isso não suporta curingas como * e + para o seu padrão)
cat yourfile | perl -p -e "s/(?<=[0-9]{6}),(?=[0-9]{2})/./g"
re.sub(pat, r'\g<1>' + f'{my_number}', str)