首页 > 解决方案 > 需要帮助将 sed 脚本转换为 python 脚本

问题描述

示例 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'

标签: pythonsed

解决方案


re.match(r"(/dev/)(xv|s)(d[a-z])", device)

将不起作用,因为您需要转义(xv|s). Plusmatch仅尝试在字符串的开头进行匹配。你想re.sub模仿sed

sed无论如何,转换命令非常容易。只需根据%您的模式拆分并使用原始字符串前缀来替换 for\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

推荐阅读