我有一个问题,我似乎无法在python中找到解决方案。
从命令行我可以通过以下方式执行此操作: sed' 1,/ COMMANDS / d'的/ var / TMP / NEWFILE
删除第1行到正则表达式#34; COMMANDS"的所有内容。简单
但是我不能用我能找到的Python做同样的事情 re.sub和multiline似乎不起作用。
所以我有一个问题,我怎么能以pythonic的方式做到这一点?我真的宁愿不在python中运行sed,除非我必须这样做。
答案 0 :(得分:3)
我会使用fileinput和inplace=True
实际更改原始文件设置标记,当您找到匹配并删除行时,直到您执行此操作:
import fileinput
import re
found = False
for line in fileinput.input("your_file",inplace=True):
if re.match("pattern",line):
found = True
if found:
print(line,end="") # print line, python2
else:
print(end="") # print, python2
如果模式if "pattern" in line
没有太复杂,也可能有效。
答案 1 :(得分:0)
设置标志为false。
迭代每一行。
对于每一行,
1)当您匹配您的图案时,请设置一个标志
2)如果当前设置了标志,则打印该行。
答案 2 :(得分:0)
又快又脏:
import re
regex = re.compile('(^|\n)(pattern)(\n|$)')
with open('file.txt') as f:
entire_file = f.read()
with open('file.txt', 'w') as f:
print(regex.split(entire_file)[0], end='', file=f)
虽然除非必须(例如,如果您的模式跨越多行),否则在整个文件上运行正则表达式可能不是一个好主意。