有效地替换与模式匹配的两行之间的文件中的文本

时间:2019-05-15 17:36:10

标签: python sed

我想在第一次出现标题后用python编辑一个很长的文件。该文件如下所示:

*First Heading
line1
line2
line3
line4
*Second Heading
line1
line2
line3
line4
*Third Heading 
line1
line2
line3
...
...
more headings and many more lines

我想替换(例如)第二标题的第2行,例如:

someNewtext line2

使用sed,我可以非常有效地做到这一点:

sed -e -i '/\*Second\ Heading/,/\*Third\ Heading/s/line2/someNewText\ line2/' file.txt 

我可以用高效的方式在Python中做类似的事情吗?

2 个答案:

答案 0 :(得分:1)

如果我们要将sed命令移植到python,它将类似于:

import re
import fileinput

state = 0
for line in fileinput.input('file.txt', inplace=True, backup='.bak'):
    line = line.rstrip('\r\n')
    if state == 1:
        line = re.sub('line2', 'someNewText line2', line)
    if line.startswith('*Second Heading'):
        state = 1
    elif line.startswith('*Third Heading'):
        state = 0
    print line
fileinput.close()

执行时间会很高效,但效率可能不高 以sedPerl编程。叹气。

答案 1 :(得分:0)

使用subprocess module,您可以像以前一样使用sed。

subprocess.run("sed -e -i '/\*Second\ Heading/,/\*Third\ Heading/s/line2/someNewText\ line2/' file.txt")