python - 需要帮助将 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'
解决方案
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
推荐阅读
- android - Android 8 - KeyGenerator 类 generateKey() 方法使应用程序崩溃
- javascript - 页面刷新JavaScript,Spring Boot时如何保持复选框处于选中状态?
- mysql - 重写from语句中的mysql子查询
- google-sheets - 如何在合并工作表时将工作表名称放在谷歌工作表的新列中?
- python - 如果在 defaultdict 中找不到键,则返回最大键的值
- angular - 将输入的文本与组合框选项进行比较
- github - 跨 GitHub 组织的看板
- c# - 接口方法不能实现另一个接口
- jquery - 括号/数组的jQuery选择器问题
- python - 如何每天在运行时更新模型/向量?