示例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'
答案 0 :(得分:2)
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