需要帮助将sed脚本转换为python脚本

时间:2018-05-30 14:28:49

标签: python sed

示例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 :(得分: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