我正在尝试在 logrotate 配置文件中使用正则表达式取消注释字符串,这会取消注释所有具有可用字符串的行。
# create new (empty) log files after rotating old ones
#create
就我而言,我试图取消上面“创建”的注释。这取消了这两行的注释。
output_lines = []
lines = self.readFile(LOGROTATE_CONFIG_FILE)
for line in lines:
if not re.search(r'\b' + str + r'\b', line):
output_lines.append(line)
else:
if line.startswith('#'):
l = re.sub(r'^ *#', '', line)
output_lines.append(l)
else:
output_lines.append(line)
if len(output_lines) > 0:
self.writeFile(LOGROTATE_CONFIG_FILE, output_lines)
您需要与
#<not-a-whitespace
匹配
更改当前的正则表达式
^ *#
到
^ *#(?=\S)
(?=...)
咒语的意思是“向前看”,也就是说我们希望在 octothorpe (\S
) 之后有一个非空白 (#
),但我们不希望它成为匹配的一部分 (所以不会被re.sub删除)
您可以在此处查看演示:https://regex101.com/r/iQtNS5/1