如何避免对脚本行重复添加注释符号的搜索替换操作
精准注释指定行,避免重复添加#的解决方案
你的问题出在直接用字符串替换,不管目标内容是否已经被注释,导致重复添加#。要实现精准匹配,应该用正则表达式定位「未被注释的目标行」,只对这类行添加注释符号。
修改后的代码
import re # 读取文件内容 with open('/home/pi/allsky/getweather.sh', 'r') as file: filedata = file.read() # 正则精准替换:仅给未被注释的目标行添加# filedata = re.sub( r'^(\s*)(?!#)/home/pi/allsky/get-temp.py', r'\1#/home/pi/allsky/get-temp.py', filedata, flags=re.MULTILINE ) # 写入修改后的内容 with open('/home/pi/allsky/getweather.sh', 'w') as file: file.write(filedata)
代码说明
re.MULTILINE:让正则中的^匹配每一行的开头,而非整个文本的开头^(\s*):捕获行前的空白字符(空格、制表符),替换时保留原缩进格式(?!#):负前瞻断言,确保当前行开头没有#(即未被注释),只有满足这个条件才会执行替换- 替换后的
\1#/home/pi/...:保留捕获到的空白字符,再加上#和原路径,保证注释后的格式一致
这样无论运行多少次,都只会给未被注释的目标行添加一次#,不会出现重复注释的问题。
内容的提问来源于stack exchange,提问作者BobW
相关产品推荐
相关产品推荐

