Нужна помощь в преобразовании сценария Sed в сценарий Python - PullRequest
0 голосов
/ 30 мая 2018

пример команды sed:

$ echo "/dev/sda1 /dev/xvdb3" | sed -r 's%(/dev/)(xv|s)(d[a-z])[0-9]*%\1(xv|s)\3%g' 
/dev/(xv|s)da /dev/(xv|s)db

как преобразовать его в код Python?

пробовал следующий код:

device = "/dev/sda5"
m = re.match(r"(/dev/)(xv|s)(d[a-z])", device)
print m.group(0)

получил ошибку:

print m.group(0)
AttributeError: 'NoneType' object has no attribute 'group'

1 Ответ

0 голосов
/ 30 мая 2018
re.match(r"(/dev/)(xv|s)(d[a-z])", device)

не будет работать, потому что вам нужно экранировать скобки в (xv|s).Плюс match пытается сопоставить только в начале строки.Вы хотите, чтобы re.sub имитировал sed

В любом случае, команду sed очень легко преобразовать.Просто разделите в соответствии с % в вашем шаблоне и используйте префикс необработанной строки для замены \1 и тому подобное (или мешающие последовательности Python мешают)

, так что с вашими точными выражениями поиска и замены:

re.sub("(/dev/)(xv|s)(d[a-z])[0-9]*",r"\1(xv|s)\3","/dev/sda1 /dev/xvdb3")

отпечатки:

/dev/(xv|s)da /dev/(xv|s)db
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...