Если у вас есть текстовый файл и вы хотите найти и заменить часть соответствующего шаблона, как бы вы сделали это с perl one-liners, sed или python?

Например:

"653433,78"

совпадать с [0-9]{6},[0-9]{2} .

Изменить , чтобы . ,

2 ответа2

4

Вы можете использовать пронумерованные подгруппы. то есть:

Найти:

([0-9]{6}),([0-9]{2})

Заменить:

\1.\2


Пример в Python:

import re
inp = '653433,78'
out = re.sub(r'([0-9]{6}),([0-9]{2})', r'\1.\2', inp)
print out

Это даст вам:

>>>'653433.78'
2

Вы можете захватить совпавшую часть вокруг шаблона, который хотите заменить, и затем повторно использовать его в операторе замены.

cat yourfile | perl -p -e "s/([0-9]{6}),([0-9]{2})/\\1.\\2/g"

Также может быть использовано более сложное решение с lookahead и lookbacks (но это не будет поддерживать символы подстановки, такие как * и + для вашего шаблона)

cat yourfile | perl -p -e "s/(?<=[0-9]{6}),(?=[0-9]{2})/./g"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .